列表中的列表和“值解包过多”

17 投票
2 回答
38423 浏览
提问于 2025-04-16 02:10

我正在尝试用下面的代码处理一个列表的列表,想要创建一个新的列表的列表,里面的新元素是旧列表中各个列表元素的某种组合……如果这样说能让你明白的话!这是代码:

 for index, item in outputList1:
    outputList2 = outputList2.append(item[6:].extend(outputList1[index+1][6:]))

但是,我遇到了一个“值太多,无法拆分”的错误。即使用下面的代码,我也会出现这个错误:

    for index, item in outputList1:
       pass

我可能哪里做错了呢?

2 个回答

11

你忘记用了 enumerate,应该这样做:

for index,item in enumerate(outputList1) :
  pass
27

for语句用于遍历一个可迭代的对象——比如说列表,它会一个一个地处理列表里的内容,所以在每次循环中,你可以得到一个值。

当你使用 for index, item in list: 时,你试图把一个值拆分成两个变量。这在 for key, value in dict.items(): 中是可以的,因为它会遍历字典的键和值,顺序是随机的。不过,你似乎想要一个数字索引,这里有一个函数 enumerate(),它可以同时获取可迭代对象的值和它的索引:

for index, item in enumerate(outputList1):
    pass

补充一下:因为你问题的标题提到“列表的列表”,我应该指出,当遍历一个列表时,如果每个列表项本身也是一个可迭代的对象,那么拆分成多个变量是可以的。例如:

list = [ ['a', 'b'], ['c', 'd'] ]
for item1, item2 in list:
    print item1, item2

这将输出:

a b
c d

如你所预期的那样。这种方式的工作原理和字典类似,只不过你可以在包含的列表中有两个、三个,或者更多的项。

撰写回答