當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。