在迭代工具迭代器中,是否有一种简单的方法将整数附加到每个项?如果使用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代码保持不变。
发布于 2018-02-08 19:15:42
这两个替代方案各自产生一个迭代器。在第一种情况下,迭代器是由生成器表达式创建的。在第二个过程中,迭代器是通过使用发生器函数创建的。
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)https://stackoverflow.com/questions/48692895
复制相似问题