猿问

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

我在Python中有两个看起来像这样的列表:


 lst = [1, '?2']

 replace_lst1 = ['a','b','c']

对于'?2'in中的每次出现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'] ]

如果您能为我提供一些建议,那就太好了。


绝地无双
浏览 950回答 3
3回答

四季花海

如果您稍稍更改数据结构,那么对于itertools模块而言,这是一个微不足道的问题:>>> 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']]

临摹微笑

>>> 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))

慕码人2483693

我将使用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 herefor 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可以将?*放置在任何位置(但不能以任何顺序放置)。
随时随地看视频慕课网APP

相关分类

Python
我要回答