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

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

如何將列表中的每個項目附加到 Python 列表中的列表?

如何將列表中的每個項目附加到 Python 列表中的列表?

慕無忌1623718 2021-09-02 20:03:27
對不起,標題令人費解。例如,我有一個列表:[a, b, c, d]我想以這種格式生成具有不同組合的排名列表:[a][b][c][d][a, b][a, c][a, d][a, b, c][a, b, d][a, b, c, d]我在生成此列表時遇到問題。到目前為止,我首先做的是通過在每次迭代中添加一個元素來生成每個列表:[][a][a, b][a, b, c]然后我生成了排名列表的長度:[][][][][a][a][a][a, b][a, b][a, b, c]現在我被困在這里。Python 中是否有允許我執行此操作的庫,或者您只能在代碼中手動執行此操作?我要做的最后一件事是從我在頂部生成的原始列表中附加一個一對一的列表。這是我嘗試過的代碼,假設original_list是我在頂部制作的原始列表,并且new_list是我在此文本上方生成的列表:for x in range(0, len(original_list)):    new_list[x].append(original_list[x])這顯然不起作用,因為它將每個項目附加original_list到new_list.編輯:元素應該按字母順序排列,只有最后一個元素具有不同的組合,沒有重復元素,因為我在一個包含 21 個項目的列表上嘗試這個。
查看完整描述

3 回答

?
哈士奇WWW

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

通過將所需的列表追加到新列表中使用簡單迭代:


lst = ['a', 'b', 'c', 'd', 'e']


nlst = []

for i in range(len(lst)):

    for y in lst[i:]:

        nlst.append(lst[:i] + list(y))


for x in nlst:

    print(x)


# ['a']

# ['b']

# ['c']

# ['d']

# ['e']

# ['a', 'b']

# ['a', 'c']

# ['a', 'd']

# ['a', 'e']

# ['a', 'b', 'c']

# ['a', 'b', 'd']

# ['a', 'b', 'e']

# ['a', 'b', 'c', 'd']

# ['a', 'b', 'c', 'e']

# ['a', 'b', 'c', 'd', 'e']


查看完整回答
反對 回復 2021-09-02
?
呼啦一陣風

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

使用itertools recipes 中的 powerset recipe ,您可以執行以下操作:


from itertools import chain, combinations



def powerset(iterable):

    s = list(iterable)

    it = chain.from_iterable(combinations(s, r) for r in range(len(s) + 1))

    return map(list, (e for e in it if e))



result = sorted(powerset(['a', 'b', 'c', 'd']), key=lambda x: (len(x), ''.join(x)))

for s in result:

    print(s)

輸出


['a']

['b']

['c']

['d']

['a', 'b']

['a', 'c']

['a', 'd']

['b', 'c']

['b', 'd']

['c', 'd']

['a', 'b', 'c']

['a', 'b', 'd']

['a', 'c', 'd']

['b', 'c', 'd']

['a', 'b', 'c', 'd']

更新


鑒于更新的要求,您可以執行以下操作:


lst = ['a', 'b', 'c', 'd']

length = len(lst)



def patterns(l):

    for i in range(length):

        for c in l[i:]:

            yield l[:i] + [c]



for pattern in sorted(patterns(lst), key=lambda x: (len(x), ''.join(x))):

    print(pattern)

輸出


['a']

['b']

['c']

['d']

['a', 'b']

['a', 'c']

['a', 'd']

['a', 'b', 'c']

['a', 'b', 'd']

['a', 'b', 'c', 'd']


查看完整回答
反對 回復 2021-09-02
?
繁星點點滴滴

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

嘗試這個:


from itertools import combinations


a = ['a', 'b', 'c', 'd']

result = [list(combinations(a,i))for i in range(1,len(a)+1)]

并像這樣打印:


for i in result:

    print(*list(i), sep='\n')


查看完整回答
反對 回復 2021-09-02
  • 3 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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