列表中的列表和“值解包过多”
我正在尝试用下面的代码处理一个列表的列表,想要创建一个新的列表的列表,里面的新元素是旧列表中各个列表元素的某种组合……如果这样说能让你明白的话!这是代码:
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
如你所预期的那样。这种方式的工作原理和字典类似,只不过你可以在包含的列表中有两个、三个,或者更多的项。