[英]Python append for multiple lists
我遇到了在多个列表中追加元素的问题。 我的程序是这样的。 其中list只是一系列数字。
for j in range(0, len(list)):
if (int(list[j][4]) == 0 or int(list[j][:-4]) == 41601000000):
filelist0.append(list[j])
if (int(list[j][4]) == 1 or int(list[j][:-4]) == 41602000000):
filelist1.append(list[j])
if (int(list[j][4]) == 2 or int(list[j][:-4]) == 41603000000):
filelist2.append(list[j])
if (int(list[j][4]) == 3 or int(list[j][:-4]) == 41604000000):
filelist3.append(list[j])
if (int(list[j][4]) == 4 or int(list[j][:-4]) == 41605000000):
filelist4.append(list[j])
if (int(list[j][4]) == 5 or int(list[j][:-4]) == 41606000000):
filelist5.append(list[j])
if (int(list[j][4]) == 6 or int(list[j][:-4]) == 41607000000):
filelist6.append(list[j])
if (int(list[j][4]) == 7 or int(list[j][:-4]) == 41608000000):
filelist7.append(list[j])
if (int(list[j][4]) == 8 or int(list[j][:-4]) == 41609000000):
filelist8.append(list[j])
这很丑。 有没有办法在一两行中编写以上代码? 显然,我可以迭代字符串,但是不能迭代列表的名称。 (无法在范围(0,9)中对m的filelist [m]进行迭代)。
谢谢!
以下内容应等效:
filelists = [filelist0, filelist1, filelist2, filelist3, filelist4,
filelist5, filelist6, filelist7, filelist8]
for x in lst:
for i, filelist in enumerate(filelists):
if int(x[4]) == i or int(x[:-4]) == 41601000000 + i * 1000000:
filelist.append(x)
请注意,我将list
重命名为lst
,对变量使用内置名称不是一个好主意。
为什么不将列表放入字典? 如果项目尚不在其中,则可以使用defaultdict
自动创建该项目。 最后的增量数字由%d完成,然后转换为字符串,然后使用int
转换回数字。 仍然很丑,但是你去了。
from collections import defaultdict
filelist = defaultdict(list)
for j in range(0, len(list)):
for fl in range(0, 9) #0-8
if (int(list[j][4]) == fl or int(list[j][:-4]) == int('4160%d000000' % fl+1)):
filelist[fl].append(list[j])
一个列表的解决方案
filelists = []
list = [[1,3,2,6,5,7,6],[3,5,7,8,5,5,4]]
for i in range(8):
filelists.append([])
for j in range(0, len(list)):
if (int(list[j][4]) == i or int(list[j][-4]) == 41601000000):
print 'added'
filelists[i-1].append(list[j])
结果是
>>> filelists
[[], [], [], [], [[1, 3, 2, 6, 5, 7, 6], [3, 5, 7, 8, 5, 5, 4]], [], [], []]
如果您使用的是Python 2.7,则实际上可以使用map()函数而无需分配变量,例如
>>> listdata = [0, 1, 2, 3, 4]
>>> list_o_lists = [ls0, ls1, ls2, ls3, ls4]
>>> map(lambda x, y: x.append(y), listdata, list_o_lists)
希望这会有所帮助,以为它比其他答案要简单一些。
filelist = [[] for _ in range(9)]
for j, item in enumerate(item_list):
for i in range(9):
if (int(item[4])==i or
int(item[-4])==int('4160{}000000'/format(i+1))
):
filelist[i].append(j)
break
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.