当数组列表中仍有空格时,将第一项附加到数组列表中

时间:2016-09-30 02:56:00

标签: python arrays python-2.7 loops

让我们说我需要将2个元素存储到列表中。

我有5个项目:苹果,橙子,柠檬,木瓜,香蕉

这些项目我保存在文本文件中,因此有5行。

我连接文件并逐行开始读取。每次我读一行时,我都会在数组中附加一个项目。每次数组将填满2个项目,当它完整时,我将清空它并存储下两个项目。

当它到达最后一项时我该怎么办?我还有一个额外的地方,我打算再次存储第一个项目?

示例:

1st time store
apple, orange, 

2nd time store
lemon, papaya,

3rd time store
banana, apple

4th time store
orange, lemon

环........

我目前的代码无法执行此操作:

def function():
    fo = open("1.txt", "r")
    print "Name of the file: ", fo.name 
    sent_count=0
    ele = []
    while True:
        lines = fo.readlines()   
        for line in lines:
            sent_count+=1
            if(sent_count%4!=0):
                ele.append(lines[sent_count-1])
            if(sent_count%4==0):
                ele.append(lines[sent_count-1])
                for i in ele:
                    print i
                ele = []
                print(sent_count)
                time.sleep(1) 

1 个答案:

答案 0 :(得分:1)

实际上,您可以避免清除ele阵列。有一些有用的内置模块,如collection。它允许您创建自定义数组。您可以设置阵列的maxlen。此外,您可以设置左/右追加。

d = collections.deque([], maxlen=2)

表示数组d可以包含两个项目,如果我们追加一个项目,我们将附加右侧(默认)。 此外,您不需要(如果数据未动态更改)重新打开您的文件。一旦你打开它,你可以在`itertools'的帮助下重复它的行。它有很多很好的功能,我建议你浏览这些模块。

for i in itertools.repeat([1,2,3], 10):
print(i) 

将打印迭代器[1,2,3] 10次。

所以整体代码看起来像这样,但我相信你可以优化它并编写更有效的代码。

import itertools
import collections

data = ['apple', 'orange', 'lemon', 'papaya', 'banana']
d = collections.deque(maxlen=2)

for i in itertools.repeat(data, 10):
    for item in i:
        d.append(item)
        print(d)

尝试并查看输出。祝好运! 顺便说一下,只需进行一些更改,使其适用于python 2.7。除了print函数之外几乎没有区别。 python 2.7也有这些模块。