use*_*074 2 python unique python-itertools python-3.x
例如,itertools.chain()相当于什么:
set.union({1,2,3},{3,4,2,5},{1,6,2,7})
Run Code Online (Sandbox Code Playgroud)
(显然,这将返回生成器,而不是集合)
没有什么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
Run Code Online (Sandbox Code Playgroud)
...而它正在起作用:
>>> 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]
Run Code Online (Sandbox Code Playgroud)
另外,如果您希望从较小的构建基块中构成解决方案(这是一种更灵活,更“ itertoolsy”的方法),则可以编写一个通用uniq()函数并将其与chain():
def uniq(iterable):
seen = set()
for x in iterable:
if x in seen:
continue
seen.add(x)
yield x
Run Code Online (Sandbox Code Playgroud)
实际上:
>>> 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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |