正常行为为:
>>> for i,j in enumerate(['a','b','c']):
... print ('i:', i,'j:', j)
...
i: 0 j: a
i: 1 j: b
i: 2 j: c
我想使用这个代码,带有额外的列表来打开包装:
>>> for i,j,k in enumerate(['a','b','c']), ['d','e','f']:
... print ('i:', i,'j:', j,'k:',k)
...
i: (0, 'a') j: (1, 'b') k: (2, 'c')
i: d j: e k: f
但我期待的行为是:
>>> for i,j,k in enumerate(['a','b','c']), ['d','e','f']:
... print ('i:', i,'j:', j,'k:',k)
...
i: 0 j: a k: d
i: 1 j: b k: e
i: 2 j: c k: f
为什么enumerate没有解包到i,j,而k保存最后一个列表的解包值?
enumerate(['a','b','c']), ['d','e','f']
是由两个元素组成的元组:enumerate对象和['d','e','f']
列表。(注意逗号,
表示元组,而不是括号(
当您对其进行迭代时,您将进入第一个循环中的enumerate对象,它包含3个项目,这些项目将被解压缩为i
、j
和k
。在第二个循环中,您会得到一个列表,该列表同样会被解压缩。
您希望同时对两者进行迭代,因此请使用zip
。在每个循环中,您将从enumerate
获得一个元组,从列表中获得一个整数,因此在拆包时必须重现该结构:
for (i, j), k in zip(enumerate(['a','b','c']), ['d','e','f']):
print ('i:', i,'j:', j,'k:',k)
但压缩列表并枚举压缩列表可能更清楚:
for i, (j, k) in enumerate(zip(['a','b','c'], ['d','e','f'])):
print ('i:', i,'j:', j,'k:',k)
两者都给出相同的输出:
i: 0 j: a k: d
i: 1 j: b k: e
i: 2 j: c k: f