![](/img/trans.png)
[英]Replace one list of items with another list in all possible combinations in 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
可以是任何可迭代對象,例如list
或tuple
。
一般來說,可迭代的是任何 python object 和返回迭代器的__iter__
方法(實現 __next__ 的__next__
); 可迭代對象可以用for
循環遍歷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.