我想从列表中读取特定数量的行,并将所有这些值分配给新列表。然后我想从之前的last_value + 1行读取下一个完整相同行数并将它们分配给新列表。到目前为止,我有这个:
我们说u = [1,2,3....,9,10,11,12,13...,19,20]
,我想将u
中的前10个值分配到我新生成的list1 = [] => list1 = [1,2,..9,10]
然后我希望将u
的后10个值分配给list2
,以便list2 = [11,12,13..,20]
。到目前为止的代码是:
nLines = 10
nrepeats = 2
j=0
i=0
while (j<nrepeats):
### Generating empty lists ###
mklist = "list" + str(j) + " = []"
### do the segmentation ###
for i, uline in enumerate(u):
if i >= i and i < i+nLines:
mklist.append(uline)
j=j+1
现在的问题是,我无法附加到mklist,因为它是一个字符串:
AttributeError: 'str' object has no attribute 'append'
如何在该循环中分配这些值?
答案 0 :(得分:2)
您可以使用更合适的集合,例如字典:
nLines = 10
nrepeats = 2
j=0
i=0
my_dict = {}
while (j<nrepeats):
### Generating empty lists ###
my_dict[str(j)] = []
### do the segmentation ###
for i, uline in enumerate(u):
if i >= i and i < i+nLines:
my_dict[str(j)].append(uline)
j=j+1
答案 1 :(得分:1)
您可以使用zip
函数将迭代中的元素分组为相同大小的组。实际上有两种方法,在处理无法彻底划分源数据的情况方面有所不同
u = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
第一种方法是使用常规zip
并丢弃剩余的片段
>>>list(zip(*[iter(u)]*10))
[(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), (11, 12, 13, 14, 15, 16, 17, 18, 19, 20)]
第二种方式使用itertools.zip_longest
并使用一些fillvalue
(默认None
)填充最后一个组
>>>import itertools
>>>list(itertools.zip_longest(*[iter(u)]*10, fillvalue=None))
[(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), (11, 12, 13, 14, 15, 16, 17, 18, 19, 20), (21, None, None, None, None, None, None, None, None, None)]