是否有一种简单的方法可以将一个整数附加到itertools迭代器中的每个项目?如果我使用itertools.product
,我不会收到预期的输出。例如:
>>> for i in itertools.product(itertools.combinations(np.arange(4),2),(4,)):
... print(i)
...
((0, 1), 4)
((0, 2), 4)
((0, 3), 4)
((1, 2), 4)
((1, 3), 4)
((2, 3), 4)
但我希望(我想要的)是
>>> for i in itertools.product(itertools.combinations(np.arange(4),2),(4,)):
... print(i)
...
(0, 1, 4)
(0, 2, 4)
(0, 3, 4)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
我知道我可以"压扁"输出,但我宁愿构造迭代器来生成元组,而不是元组的元组。
我有很多不同的迭代器,我想保持代码对于product
的itertool迭代器和普通的itertool迭代器保持相同
答案 0 :(得分:1)
这两个备选方案各自生成一个迭代器。在第一种情况下,迭代器由generator expression创建。在第二个中,迭代器是使用generator function创建的。
In [9]: for i in (tup + (4,) for tup in itertools.combinations(np.arange(4),2)):
...: print(i)
...:
(0, 1, 4)
(0, 2, 4)
(0, 3, 4)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
In [10]:
生成器函数在调用站点可能更具可读性,尤其是在函数名称描述其行为的情况下。
import itertools
import numpy as np
def adder(it, addend):
for x in it:
yield x + addend
for i in adder(itertools.combinations(np.arange(4),2), (4,)):
print(i)