在枚举这样的元组列表时,如何避免使用嵌套元组解包?
for i, (x, y) in enumerate(zip("1234", "ABCD")):
# do stuff
在枚举这样的元组列表时,如何避免使用嵌套元组解包?
for i, (x, y) in enumerate(zip("1234", "ABCD")):
# do stuff
用于itertools.count
避免嵌套元组拆包:
from itertools import count
for i, x, y in zip(count(), "1234", "ABCD"):
# do stuff
该代码很好,并且是最干净的习语。
试图避免它正在解决一个非问题,它实际上比使用更糟糕,因为一个陷阱是如果我们使用/ 迭代器长度不同它会中断,因为它是一个无限迭代器:itertools.count
enumerate
zip_longest
count()
itertools.count
如果我们使用zip()
,即两个迭代器的长度相同,或者我们可以将较长的迭代器截断为较短的迭代器的长度,则可以工作:for i, x, y in itertools.zip_longest(count(), "1234", "ABCD"): print(f'{i}: {x} {y}')
itertools.count
中断(即无限运行)如果我们使用izip_longest()
, 迭代器的长度不同: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
...
由于对相同大小的迭代器使用一种习惯用法,而对不同长度的迭代器使用另一种习惯用法会非常混乱,因此我们通常不应该使用count()
它。即使你知道你的代码不会,有人可能会复制.修改你的代码并点击它。所以这是不好的成语。