亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找元素為 1...N 的列表的 K 個子集,同時保留元素的順序

查找元素為 1...N 的列表的 K 個子集,同時保留元素的順序

開心每一天1111 2021-12-16 16:36:53
給定來自 1...NI 的整數列表,我試圖找到元素的 K 個子集,同時保留元素的順序。例如,當 N = 4 且 K = 2 時:[1] [2, 3, 4][1, 2] [3, 4][1, 2, 3] [4][1, 2, 3, 4] []將是正確的輸出。到目前為止,我已經獲得了第一列的可能性。但我正在努力獲得正確的邏輯。    final = [['' for x in range(K)] for y in range(N)]    i = 0    for k in range(0, K):        # row tracker        i = 0        while i < N:            if k > 0:                st = len(final[i][k - 1])            else:                st = 0            for j in range(0, N):                tmp = ""                prefix = chemicals[:j + 1]                tmp = tmp.join(str(i) for i in prefix)                final[i][k] = tmp                i += 1        print同樣,正確的輸出將是:[1] [2, 3, 4][1, 2] [3, 4][1, 2, 3] [4][1, 2, 3, 4] []集合可以為空的地方。更新:這是 N=4, K=3 的正確輸出[1] [2] [3, 4][1] [2, 3] [4][1] [2, 3, 4] [][1, 2] [3] [4][1, 2] [3, 4] [][1, 2, 3] [4] [][1, 2, 3, 4] [] []
查看完整描述

2 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

您可以使用一個函數從給定的起始編號迭代索引,默認為1, to n,產生從起始編號到索引的一系列數字,并遞歸地將遞歸調用中的子集與一個更高的起始索引和少一個子集,直到起始索引大于n或k變為1,此時應產生剩余范圍:


def get_subsets(n, k, s=1):

    if s > n or k == 1:

        yield [list(range(s, n + 1))] + [[] for _ in range(1, k)]

        return

    for i in range(s, n + 1):

        for subsets in get_subsets(n, k - 1, i + 1):

            yield [list(range(s, i + 1))] + subsets

以便:


for s in get_subsets(4, 2):

    print(*s)

輸出:


[1] [2, 3, 4]

[1, 2] [3, 4]

[1, 2, 3] [4]

[1, 2, 3, 4] []

然后:


for s in get_subsets(4, 3):

    print(*s)

輸出:


[1] [2] [3, 4]

[1] [2, 3] [4]

[1] [2, 3, 4] []

[1, 2] [3] [4]

[1, 2] [3, 4] []

[1, 2, 3] [4] []

[1, 2, 3, 4] [] []


查看完整回答
反對 回復 2021-12-16
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

我認為對切片進行簡單的列表理解就足夠了。您可能還想使用itertools.combinations:


import itertools


N = 4

K = 2


elements = list(range(1, N + 1))

final = [[elements[a:b] for a, b in zip([0] + cuts, cuts + [N])]

                        for cuts in (list(c) for c in itertools.combinations(elements, K - 1))]


for x in final:

    print(*x)

輸出:


[1] [2, 3, 4]

[1, 2] [3, 4]

[1, 2, 3] [4]

[1, 2, 3, 4] []


查看完整回答
反對 回復 2021-12-16
  • 2 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號