2010-08-02 56 views
11

我想在列表列表中使用以下代码来创建列表的新列表,其中的新元素是列表中元素的某种组合旧名单...如果这是有道理的!这里是代码:列表和“解压缩太多值”

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

但是,我得到一个“太多的值来解压缩”错误。我似乎甚至得到以下代码的错误:

for index, item in outputList1: 
     pass 

我可以做什么错了?

+3

“枚举”缺少,即,索引,项枚举(otputList1): – doug 2010-08-02 08:25:05

+0

也是我在第一行语法不正确,我只需要: outputList2.append(项目[6:]延长( outputList1 [index + 1] [6:])) 与C一起工作太久了! – Bitrex 2010-08-02 08:48:45

+0

在Python3中,您可以对'outputList1'中的index *项目执行'。然后'index'有第一个元素,'item'有剩下的。 – 2013-12-28 02:44:08

回答

18

在一个迭代的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 

预期。它的工作方式与字典类似,只有你可以在包含的列表中拥有两个,三个或任意多个项目。

+0

这不是如何迭代字典的作品。在终端中尝试它,你会得到等值线是不可迭代的,其中等值线是密钥的类。你在想什么是dict.items()中的关键和价值:但是这不是你所说的默认行为。 – Amoss 2010-08-02 09:05:02

+0

我得到了同样的错误,试图遍历包含元组的列表:'lst = [('a','b')] for key,value in lst:'这可能是因为BOM unicode登录在我的第一个元组? – 2017-03-09 07:25:59

+0

@HrvojeT什么版本的Python?它适用于我 - 如果其中一个字符串中有BOM,那么它不应该影响元组的迭代性 – 2017-03-09 13:21:20

9

你忘了使用枚举,你的意思是要做到这一点:

for index,item in enumerate(outputList1) : 
    pass 
+0

哎呀,所以我做到了!谢谢! – Bitrex 2010-08-02 08:29:11

相关问题