0

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

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

2 回答 2

1

用于itertools.count避免嵌套元组拆包:

from itertools import count

for i, x, y in zip(count(), "1234", "ABCD"):
    # do stuff
于 2012-08-15T11:49:07.640 回答
-1

该代码很好,并且是最干净的习语。

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

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()它。即使你知道你的代码不会,有人可能会复制.修改你的代码并点击它。所以这是不好的成语。

于 2020-01-15T13:42:10.763 回答