Python:如何用另一个列表中的所有元素替换列表中的元素?

时间:2013-06-06 11:56:48

标签: python list

我在Python中有两个列表如下所示:

 lst = [1, '?2']
 replace_lst1 = ['a','b','c']

对于'?2'lst的每次出现,我想将其替换为replace_lst1中的每个元素,从而生成如下列表:

res = [ [1,'a'], 
        [1,'b'],
        [1,'c'] ]

同样,如果我有以下列表:

lst = [1, '?2','?3']
replace_lst1 = ['a','b','c']
replace_lst2 = ['A', 'B', 'C']

我想用'?2'replace_lst1中的每个元素替换'?3'来自replace_lst2的每个元素,从而探索所有可能的排列。结果应如下所示:

res = [ [1,'a','A'], 
        [1,'a','B'],
        [1,'a','C'],
        [1,'b','A'], 
        [1,'b','B'],
        [1,'b','C'],
        [1,'c','A'], 
        [1,'c','B'],
        [1,'c','C'] ]

如果您能为我提供一些如何继续的建议,那就太棒了。

谢谢!

3 个答案:

答案 0 :(得分:3)

如果您稍微更改数据结构,这对itertools module来说是一个微不足道的问题:

>>> lst = [1]
>>> combine = [["a", "b", "c"], ["A", "B", "C"]]
>>> import itertools
>>> [lst+list(item) for item in itertools.product(*combine)]
[[1, 'a', 'A'], [1, 'a', 'B'], [1, 'a', 'C'], [1, 'b', 'A'], [1, 'b', 'B'], 
 [1, 'b', 'C'], [1, 'c', 'A'], [1, 'c', 'B'], [1, 'c', 'C']]

答案 1 :(得分:3)

>>> from itertools import product
>>> lst = [1]
>>> combine = [["a", "b", "c"], ["A", "B", "C"]]
>>> list(product(*[lst]+combine))
[(1, 'a', 'A'), (1, 'a', 'B'), (1, 'a', 'C'), (1, 'b', 'A'), (1, 'b', 'B'), (1, 'b', 'C'), (1, 'c', 'A'), (1, 'c', 'B'), (1, 'c', 'C')]

您也可以使用

list(product(lst, replace_lst1, replace_lst2))

答案 2 :(得分:0)

我会使用itertools.product,加上一个测试来替换?价值观:

lst = [1, '?2','?3']
replace_lst1 = ['a','b','c']
replace_lst2 = ['A', 'B', 'C']
res = []
#put as many replace_lst as you need here
for values in itertools.product(replace_lst1, replace_lst2):
    val_iter = iter(values)
    res.append([x if str(x).find('?') == -1 else next(val_iter) for x in lst])

使用val_iter可以将?*放在任何地方(但不能以任何顺序放置)。