lintcode-2169 · 三个三个的生成数据

描述

请编写 Python 代码,将一串数据作为模板数据,并根据模板数据使用生成器 3 个 3 个的生成指定条数的数据。

请在 solution.py 中编写创建生成器的代码,我们会在 main.py 中通过导入的方式运行你的代码,以检测你的代码是否实现了以上功能。

**

  • 若模板数据不是 3 的倍数,则舍弃掉最后不足的数据重新从首位开始循环生成
  • 若模板数据小于 3 个数,则直接将模板数据作为一条数据进行重复生成

样例

样例一:

当输入数据为:

[1,0,5,5,3,10,9,10,3,5,5,6,7,4,10,8,7,7,7]
7 
复制代码

输出数据为:

[1, 0, 5]
[5, 3, 10]
[9, 10, 3]
[5, 5, 6]
[7, 4, 10]
[8, 7, 7]
[1, 0, 5]
复制代码

样例二:

当输入数据为:

[8,2,5,10,3,3,0,7,2,1,5,6,6,5,1,6,9]
10
复制代码

输出数据为:

[8, 2, 5]
[10, 3, 3]
[0, 7, 2]
[1, 5, 6]
[6, 5, 1]
[8, 2, 5]
[10, 3, 3]
[0, 7, 2]
[1, 5, 6]
[6, 5, 1]
复制代码

题解

首先,这道题是一道很简单的题目,这里需要判断,-
若模板数据不是 3 的倍数,则舍弃掉最后不足的数据重新从首位开始循环生成,这里对3进行求余数,判断是不是3的倍数,如果不是直接舍弃。 若模板数据小于 3 个数,则直接将模板数据作为一条数据进行重复生成。这里定义一个变量,每次生成的时候就直接把他加1累加,然后与输入的值进行比较,判断是否需要退出。

class DataLoader:
    def __init__(self, data):
        # write your code here
        self.L1=[]
        for i in data:
            self.L1.append(i)
        for i in range(len(self.L1)%3):
            self.L1.pop()

    def get_data(self):
        # write your code here
        j = 0 
        while True:
            self.L=[]
            if j>=len(self.L1)-1:
                j = 0
            for i in range(3):
                self.L.append(self.L1[j])
                j+=1
            yield self.L
复制代码

猜你喜欢

转载自juejin.im/post/7018372232988590110
今日推荐