让我们说我需要将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)
答案 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
也有这些模块。