簡體   English   中英

python中兩個列表的組合

[英]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.

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