簡體   English   中英

如何生成所有可能的組合,將項目從一個列表添加到 python 中的另一個列表?

[英]How generate all possible combinations adding items from one list to another in python?

我有兩個列表:

list1 = ["a", "b"]
list2 = ["item1", "item2", "item3", "item4"] 

如何將list2中的項目添加到list1以生成具有不同長度的所有可能組合。 list1中的項目必須始終完整且位於開頭。

預計 output:

result = [["a", "b", "item1"], 
          ["a", "b", "item2"], 
          ["a", "b", "item1", "item2"], 
          ["a", "b", "item1", "item2", "item4"], 
          ["a", "b", "item3", "item4", "item2", "item1"], 
          ...]

也不需要有幾個具有相同項目的列表,只是項目的順序不同。 前任:

[["a", "b", "item1", "item2"], ["a", "b", "item2", "item1"]]

itertools.combinations是你的朋友。

注意:出於示例目的,我僅將這些組合添加到另一個列表powerset中。 在許多情況下,組合的數量可能很大,如果您要以某種方式處理組合,您可能希望單獨處理每個組合而不是將它們保存到列表中。 除非那是你的最終目標。

import itertools 

list1 = ["a", "b"]
list2 = ["item1", "item2", "item3", "item4"] 

powerset = []
for k in range(1, len(list2)+1):
    for combination in itertools.combinations(list2, k):
        powerset.append(list1 + list(combination))

產生powerset

[['a', 'b', 'item1'],
 ['a', 'b', 'item2'],
 ['a', 'b', 'item3'],
 ['a', 'b', 'item4'],
 ['a', 'b', 'item1', 'item2'],
 ['a', 'b', 'item1', 'item3'],
 ['a', 'b', 'item1', 'item4'],
 ['a', 'b', 'item2', 'item3'],
 ['a', 'b', 'item2', 'item4'],
 ['a', 'b', 'item3', 'item4'],
 ['a', 'b', 'item1', 'item2', 'item3'],
 ['a', 'b', 'item1', 'item2', 'item4'],
 ['a', 'b', 'item1', 'item3', 'item4'],
 ['a', 'b', 'item2', 'item3', 'item4'],
 ['a', 'b', 'item1', 'item2', 'item3', 'item4']]

簡短說明

來自文檔: itertools.combinations(iterable, r)從輸入iterable產生所有r長度的元素子序列。 iterable可以是任何可迭代對象,例如listtuple

一般來說,可迭代的是任何 python object 和返回迭代器__iter__方法(實現 __next__ 的__next__ ); 可迭代對象可以用for循環遍歷。

暫無
暫無

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

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