簡體   English   中英

列表中的所有6位排列

[英]All 6-Number Permutations from a List

我正在編寫一個程序,目標是獲取一個數字列表,並使用遞歸函數返回所有六個字母的組合(無需為我導入函數)。 假設我的電話號碼是“ 1 2 3 4 5 6 7 8 9”,則輸出為:

1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 5 8
1 2 3 4 5 9
1 2 3 4 6 7
1 2 3 4 6 8
1 2 3 4 6 9
1 2 3 4 7 8
... etcetera, all the way down to
4 5 6 7 8 9

我不是在尋找代碼,只是在概念上朝着正確的方向推進。 到目前為止,我嘗試過的一切都失敗了,而且我陷入了一種邏輯上的車轍。

我已經在下面包含了我之前使用的代碼,但是它實際上不是遞歸函數,似乎僅適用於6-8位數字的值。 這很雜亂,我可以完全廢棄它:

# Function prints all the possible 6-number combinations for a group of numbers
def lotto(constantnumbers, variablenumbers):
    # Base case: No more constant variables, or only 6 numbers to begin with
    if len(constantnumbers) == 0 or len(variablenumbers) == 0:    
        if len(constantnumbers) == 0:
            print(" ".join(variablenumbers[1:7]))
        else:
            print(" ".join(constantnumbers[0:6]))
        i = 6 - len(constantnumbers)
        outvars = variablenumbers[1:i + 1]
        if len(variablenumbers) > len(outvars) + 1:
            print(" ".join(constantnumbers + outvars))
            for index in range(len(outvars), 0, -1):
                outvars[index - 1] = variablenumbers[index + 1]
                print(" ".join(constantnumbers + outvars))
    else:
        i = 6 - len(constantnumbers)
        outvars = variablenumbers[1:i + 1]
        print(" ".join(constantnumbers + outvars))
        if len(variablenumbers) > len(outvars) + 1:
            for index in range(len(outvars), 0, -1):
                outvars[index - 1] = variablenumbers[index + 1]
                print(" ".join(constantnumbers + outvars))
        #Reiterates the function until there are no more constant numbers
        lotto(constantnumbers[0:-1], constantnumbers[-1:] + variablenumbers)
import itertools

for combo in itertools.combinations(range(1,10), 6):
    print(" ".join(str(c) for c in combo))

這使

1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 5 8
...
3 4 6 7 8 9
3 5 6 7 8 9
4 5 6 7 8 9

編輯:好的,這是一個遞歸定義:

def combinations(basis, howmany):
    for index in range(0, len(basis) - howmany + 1):
        if howmany == 1:
            yield [basis[index]]
        else:
            this, remainder = basis[index], basis[index+1:]
            for rest in combinations(remainder, howmany - 1):
                yield [this] + rest

編輯2:

基本案例:1個項目的組合是任何基本項目。

歸納法:N個項目組合是任何基礎項目加上剩余基礎中的(N-1)個項目組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM