2024-04-24 20:16:49 发布
网友
例如,itertools.chain()的等价物是什么:
itertools.chain()
set.union({1,2,3},{3,4,2,5},{1,6,2,7})
(显然,它返回的是生成器,而不是集合)
itertools中没有任何内容可以直接为您完成此操作。在
itertools
为了避免产生重复的项,您需要跟踪已经生成的内容,最明显的方法是使用集合。下面是一个关于itertools.chain()的简单包装,它可以做到:
from itertools import chain def uniq_chain(*args, **kwargs): seen = set() for x in chain(*args, **kwargs): if x in seen: continue seen.add(x) yield x
。。。在这里,它正在发挥作用:
或者,如果您喜欢用更小的构建块(这是一种更灵活且“itertoolsy”的方法)组成一个解决方案,您可以编写一个通用的uniq()函数,并将其与chain()相结合:
uniq()
chain()
def uniq(iterable): seen = set() for x in iterable: if x in seen: continue seen.add(x) yield x
实际操作:
>>> list(uniq(chain(range(0, 20, 5), range(0, 20, 3), range(0, 20, 2)))) [0, 5, 10, 15, 3, 6, 9, 12, 18, 2, 4, 8, 14, 16]
你可以这样做:
def chain_unique(*args): seen = set() yield from (v for v in chain(*args) if v not in seen and not seen.add(v))
itertools
中没有任何内容可以直接为您完成此操作。在为了避免产生重复的项,您需要跟踪已经生成的内容,最明显的方法是使用集合。下面是一个关于
itertools.chain()
的简单包装,它可以做到:。。。在这里,它正在发挥作用:
^{pr2}$或者,如果您喜欢用更小的构建块(这是一种更灵活且“itertoolsy”的方法)组成一个解决方案,您可以编写一个通用的
uniq()
函数,并将其与chain()
相结合:实际操作:
你可以这样做:
相关问题 更多 >
编程相关推荐