首页 > 解决方案 > 用元素组合替换列表中的变量

问题描述

我想用元素组合替换列表中的变量。更加具体:

我有这两个清单

liste1 = [1,2,3,'X','X',4]
liste2 = [5,6,7]

我想得到一个包含以下元素的列表:

[1,2,3,5,6,4]
[1,2,3,5,7,4]
[1,2,3,6,7,4]
[1,2,3,6,5,4]
[1,2,3,7,5,4]
[1,2,3,7,6,4]

有人知道怎么做吗?

标签: python

解决方案


你可以这样做:

from itertools import permutations

liste1 = [1, 2, 3, 'X', 'X', 4]
liste2 = [5, 6, 7]

def replacements(liste1, liste2):
    x_indices = [i for i, val in enumerate(liste1) if val == 'X']
    nb = len(x_indices)
    for perm in permutations(liste2, nb):
        l1 = liste1[:] # if we want to preserve the original and yield different lists
        for i, new_val in zip(x_indices, perm):
            l1[i] = new_val
        yield l1

for r in replacements(liste1, liste2):
    print(r)

输出:

[1, 2, 3, 5, 6, 4]
[1, 2, 3, 5, 7, 4]
[1, 2, 3, 6, 5, 4]
[1, 2, 3, 6, 7, 4]
[1, 2, 3, 7, 5, 4]
[1, 2, 3, 7, 6, 4]

我们首先列出出现“X”的索引,然后生成尽可能多的元素的排列liste2。对于每个排列,我们替换“X”。


推荐阅读