在 For 循环中,如何解压缩"enumerate"和另一个可迭代到三个变量



正常行为为:

>>> 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个项目,这些项目将被解压缩为ijk。在第二个循环中,您会得到一个列表,该列表同样会被解压缩。

您希望同时对两者进行迭代,因此请使用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

最新更新