我在将两个列表与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
,outputing [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] + '.'
每次来生成首字母。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句