Python追加多个列表

时间:2013-05-01 21:30:53

标签: python

我遇到了在多个列表中追加元素的问题。我的程序是这样的。列表只是一系列数字。

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]。

谢谢!

5 个答案:

答案 0 :(得分:3)

以下内容应相同:

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,为变量使用内置名称并不是一个好主意。

答案 1 :(得分:0)

为什么不将列表放入词典?如果项目尚未存在,您可以使用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])

答案 2 :(得分:0)

此解决方案包含一个列表列表

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]], [], [], []]

答案 3 :(得分:0)

如果您使用的是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)

希望这会有所帮助,认为它比其他答案简单一些。

答案 4 :(得分:-2)

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