用法:
itertools.permutations(iterable, r=None)
返回
iterable
中元素的連續r
長度排列。如果
r
未指定或為None
,則r
默認為iterable
的長度,並生成所有可能的 full-length 排列。排列元組根據輸入
iterable
的順序以字典順序發出。因此,如果輸入iterable
已排序,則組合元組將按排序順序生成。元素根據它們的位置而不是它們的值被視為唯一的。因此,如果輸入元素是唯一的,則每個排列中不會有重複值。
大致相當於:
def permutations(iterable, r=None): # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC # permutations(range(3)) --> 012 021 102 120 201 210 pool = tuple(iterable) n = len(pool) r = n if r is None else r if r > n: return indices = list(range(n)) cycles = list(range(n, n-r, -1)) yield tuple(pool[i] for i in indices[:r]) while n: for i in reversed(range(r)): cycles[i] -= 1 if cycles[i] == 0: indices[i:] = indices[i+1:] + indices[i:i+1] cycles[i] = n - i else: j = cycles[i] indices[i], indices[-j] = indices[-j], indices[i] yield tuple(pool[i] for i in indices[:r]) break else: return
permutations()
的代碼也可以表示為product()
的子序列,過濾以排除具有重複元素的條目(來自輸入池中相同位置的條目):def permutations(iterable, r=None): pool = tuple(iterable) n = len(pool) r = n if r is None else r for indices in product(range(n), repeat=r): if len(set(indices)) == r: yield tuple(pool[i] for i in indices)
返回的項目數是
n! / (n-r)!
時0 <= r <= n
或零時r > n
。
相關用法
- Python itertools.product用法及代碼示例
- Python itertools.pairwise用法及代碼示例
- Python itertools.takewhile用法及代碼示例
- Python itertools.compress用法及代碼示例
- Python itertools.dropwhile用法及代碼示例
- Python itertools.repeat用法及代碼示例
- Python itertools.combinations_with_replacement用法及代碼示例
- Python itertools.groupby()用法及代碼示例
- Python itertools.repeat()用法及代碼示例
- Python itertools.count用法及代碼示例
- Python itertools.starmap用法及代碼示例
- Python itertools.filterfalse用法及代碼示例
- Python itertools.chain.from_iterable用法及代碼示例
- Python itertools.groupby用法及代碼示例
- Python itertools.zip_longest用法及代碼示例
- Python itertools.accumulate用法及代碼示例
- Python itertools.tee用法及代碼示例
- Python itertools.combinations用法及代碼示例
- Python itertools.chain用法及代碼示例
- Python itertools.cycle用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 itertools.permutations。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。