如何生成多个列表并为其赋值
how to generate many lists and assign values to them
我想从列表中读取特定行数并将所有这些值分配给新列表。然后我想从之前的 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'
如何在该循环中分配这些值?
您可以使用更合适的集合,例如字典:
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
您可以使用 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)]
我想从列表中读取特定行数并将所有这些值分配给新列表。然后我想从之前的 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'
如何在该循环中分配这些值?
您可以使用更合适的集合,例如字典:
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
您可以使用 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)]