python中两个列表的组合

时间:2016-12-04 10:41:57

标签: python list

我经历了一些关于将两个列表与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.']

1 个答案:

答案 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来生成初始值。