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
...