[英]Combination of two lists in python
我在將兩個列表與itertools結合使用時遇到了一些問題,但是找不到解決我的問題的列表。 因此,是否可以在python中使用itertools(或任何其他模塊)執行以下操作? 我有兩個清單:
list1 = ['Elizabeth', 'Anne', 'Wells', 'Cannon']
list2 = ['E.', 'A.', 'W.', 'C.']
現在,我正在尋找一種將它們結合起來的解決方案,例如結果如下所示(例如,作為列表的列表):
['Elizabeth', 'Anne', 'Wells', 'Cannon']
['E.', 'Anne', 'Wells', 'Cannon']
['Elizabeth', 'A.', 'Wells', 'Cannon']
['Elizabeth', 'Anne', 'W.', 'Cannon']
['Elizabeth', 'Anne', 'Wells', 'C.']
['E.', 'A.', 'Wells', 'Cannon']
['E.', 'Anne', 'W.', 'Cannon']
...
['E.', 'A.', 'W.', 'C.']
產生越來越長的索引組合,然后使用它們將名稱替換為縮寫:
from itertools import combinations
def replacements(names, initials):
for count in range(len(names)):
for positions in combinations(range(len(names)), count):
yield [initials[i] if i in positions else name for i, name in enumerate(names)]
yield initials
因此,上述方法首先不替換任何內容( length = 0
),然后替換一個元素( length = 1
,輸出[0]
,然后輸出[1]
,等等),一直到3個替換( [0, 1, 2]
, [0, 1, 3]
等)。 最后,我們輸出initials
作為“ 4個替換”的情況。
演示:
>>> names = ['Elizabeth', 'Anne', 'Wells', 'Cannon']
>>> initials = ['E.', 'A.', 'W.', 'C.']
>>> for result in replacements(names, initials):
... print(result)
...
['Elizabeth', 'Anne', 'Wells', 'Cannon']
['E.', 'Anne', 'Wells', 'Cannon']
['Elizabeth', 'A.', 'Wells', 'Cannon']
['Elizabeth', 'Anne', 'W.', 'Cannon']
['Elizabeth', 'Anne', 'Wells', 'C.']
['E.', 'A.', 'Wells', 'Cannon']
['E.', 'Anne', 'W.', 'Cannon']
['E.', 'Anne', 'Wells', 'C.']
['Elizabeth', 'A.', 'W.', 'Cannon']
['Elizabeth', 'A.', 'Wells', 'C.']
['Elizabeth', 'Anne', 'W.', 'C.']
['E.', 'A.', 'W.', 'Cannon']
['E.', 'A.', 'Wells', 'C.']
['E.', 'Anne', 'W.', 'C.']
['Elizabeth', 'A.', 'W.', 'C.']
['E.', 'A.', 'W.', 'C.']
當然,除了使用專用的initials
列表之外,您還可以使用name[0] + '.'
每次只是生成初始值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.