2011-04-20 203 views

回答

13

請參閱itertools.combinations的文檔。沒有此功能的等效代碼:http://www.python.org/download/

嘗試下載最新版本:

def combinations(iterable, r): 
    # combinations('ABCD', 2) --> AB AC AD BC BD CD 
    # combinations(range(4), 3) --> 012 013 023 123 
    pool = tuple(iterable) 
    n = len(pool) 
    if r > n: 
     return 
    indices = range(r) 
    yield tuple(pool[i] for i in indices) 
    while True: 
     for i in reversed(range(r)): 
      if indices[i] != i + n - r: 
       break 
     else: 
      return 
     indices[i] += 1 
     for j in range(i+1, r): 
      indices[j] = indices[j-1] + 1 
     yield tuple(pool[i] for i in indices) 
+0

這實際上是如何工作的?我試圖理解+我錯過了一些東西。 'indices'數組告訴我使用了哪些池的元素,但我似乎無法弄清楚它是如何產生不包含重複的索引集的。 – 2015-03-13 00:26:22

+1

@JasonS,有幾點:首先,從示例中注意到,算法生成的具有'indices'的元組總是被排序(特別是'indices [i] user3780389 2017-03-08 17:21:42

+0

@JasonS我對else:return語句感到困惑。那裏有什麼縮進。什麼時候執行,如果對應於這個else? – MaPy 2017-10-02 16:18:41

相關問題