当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python itertools.combinations_with_replacement用法及代码示例


用法:

itertools.combinations_with_replacement(iterable, r)

从输入 iterable 返回 r 元素的长度子序列,允许单个元素重复多次。

根据输入 iterable 的顺序以字典顺序发出组合元组。因此,如果输入iterable 已排序,则组合元组将按排序顺序生成。

元素根据它们的位置而不是它们的值被视为唯一的。因此,如果输入元素是唯一的,则生成的组合也将是唯一的。

大致相当于:

def combinations_with_replacement(iterable, r):
    # combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
    pool = tuple(iterable)
    n = len(pool)
    if not n and r:
        return
    indices = [0] * r
    yield tuple(pool[i] for i in indices)
    while True:
        for i in reversed(range(r)):
            if indices[i] != n - 1:
                break
        else:
            return
        indices[i:] = [indices[i] + 1] * (r - i)
        yield tuple(pool[i] for i in indices)

combinations_with_replacement() 的代码也可以表示为 product() 在过滤元素未按排序顺序(根据它们在输入池中的位置)的条目后的子序列:

def combinations_with_replacement(iterable, r):
    pool = tuple(iterable)
    n = len(pool)
    for indices in product(range(n), repeat=r):
        if sorted(indices) == list(indices):
            yield tuple(pool[i] for i in indices)

返回的项目数是 (n+r-1)! / r! / (n-1)!n > 0

3.1 版中的新函数。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 itertools.combinations_with_replacement。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。