Python 在枚举压缩列表时,如何避免嵌套元组解包?

Python 在枚举压缩列表时,如何避免嵌套元组解包?,python,itertools,enumerate,iterable-unpacking,Python,Itertools,Enumerate,Iterable Unpacking,在枚举这样的元组列表时,如何避免使用嵌套元组解包 for i, (x, y) in enumerate(zip("1234", "ABCD")): # do stuff 用于避免嵌套元组解包: from itertools import count for i, x, y in zip(count(), "1234", "ABCD"): # do stuff 这段代码很好,是最干净的习惯用法 试图避免它是在解决一个非问题,实际上使用itertools.count比enume

在枚举这样的元组列表时,如何避免使用嵌套元组解包

for i, (x, y) in enumerate(zip("1234", "ABCD")):
    # do stuff
用于避免嵌套元组解包:

from itertools import count

for i, x, y in zip(count(), "1234", "ABCD"):
    # do stuff

这段代码很好,是最干净的习惯用法

试图避免它是在解决一个非问题,实际上使用
itertools.count
enumerate
更糟糕,因为一个陷阱是,如果我们使用
zip\u longest
/迭代器长度不同,它就会中断,因为
count()
是一个无限迭代器:

itertools.count
如果我们使用
zip()
,即两个迭代器的长度相同,或者我们可以将较长的迭代器截断为较短的迭代器的长度:
itertools.count
中断(即无限运行)如果我们使用
izip_longest()
,迭代器的长度不同:
因为对于相同大小的迭代器使用一种惯用语,对于不同长度的迭代器使用另一种惯用语会非常混乱,所以我们通常不应该使用
count()
。即使你知道你的代码不会,也可能有人复制。修改你的代码并点击此按钮。所以这是一个糟糕的习惯用法。

你知道吗,你可以勾选“提问”表格上的一个方框(称为“回答你自己的问题”),然后一次就把答案写进去?这段代码有什么问题吗?@jamylak除了对我来说,没有什么比我刚刚发布的答案更尴尬的了。@lazyr我更喜欢原来的答案,没有必要过分复杂化it@jamylak我想每个人都有自己的。
for i, x, y in itertools.zip_longest(count(), "1234", "ABCD"): print(f'{i}: {x} {y}')
for i, x, y in itertools.zip_longest(count(), "1234", "ABCDE"):
    print(f'{i}: {x} {y}')

0: 1 A
1: 2 B
2: 3 C
3: 4 D
4: None E
5: None None
6: None None
...