簡體   English   中英

沒有重復的組合(python)

[英]Combinations without repetition (python)

我想做以下組合:

string.1 string.1
string.2 string.2 string.1
string.3 string.3 string.2 string.1
string.4 string.4 string.3 string.2
string.4 string.1

每個項目都應該與其他項目組合,但順序無關緊要,即string.4 string.1string.1 string.4相同。 此外,每行最多應有 4 個組合。 第一列中的每個項目都與其他列中的每個項目組合在一起。 例如在第 2 行,有string.2-string.2 & string.2-string.1的組合。

這是我的代碼:

import itertools
BLOCKS=4
DB="string"
getiter = lambda : itertools.chain( range(1, BLOCKS+1))
for i in getiter():
    for j in range(1, BLOCKS, 4):
            emit = f"{DB}.{i}"
            for k in range(4):
                    if j + k > BLOCKS:
                            break
                    emit += " {}.{}".format(DB, j+k)
            print(emit)

這是我目前的 output:

string.1 string.1 string.2 string.3 string.4
string.2 string.1 string.2 string.3 string.4
string.3 string.1 string.2 string.3 string.4
string.4 string.1 string.2 string.3 string.4

在這里,有些組合是多余的。 我該如何擺脫這些?

也許是這樣的:

import itertools
BLOCKS=4
DB="string"
getiter = lambda : itertools.chain( range(1, BLOCKS+1))
for i in getiter():
    emit = f"{DB}.{i}"
    for k in range(1, BLOCKS+1):
        if k > BLOCKS: break
        else if k == i: continue #<========== Added
        emit += " {}.{}".format(DB, k)
    print(emit)

(請注意,第二個循環(j)似乎沒用,所以我確實刪除了它)

Output:

string.1 string.2 string.3 string.4
string.2 string.1 string.3 string.4
string.3 string.1 string.2 string.4
string.4 string.1 string.2 string.3

暫無
暫無

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

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