我经历了一些关于将两个列表与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.']
答案 0 :(得分:0)
生成 indices 的更长和更长的组合,然后使用这些组合将名称替换为姓名首字母:
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个替换([1]
,[0, 1, 2]
等)。最后,我们输出[0, 1, 3]
作为“4替换”案例。
演示:
initials
当然,您不必使用专用的>>> 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
来生成初始值。