Python 用另一个列表中的值顺序替换列表值
假设我有一个列表:Python 用另一个列表中的值顺序替换列表值,python,list,Python,List,假设我有一个列表: my_list = ["A", "B", "C", "X", "X", "X"] 我想用另一个列表中的值或2D列表中的值替换X值(该列表生成时重复编号等于列表中“X”的编号): 所以 我的问题是如何用组合中的值替换My_list中的“X”值,这样第一个结果将是[“A”、“B”、“C”、“L”、“L”、“L”]和第二个结果[“A”、“B”、“C”、“L”、“L”、“E”]等。我最好将它们放入一个2D列表中,然后打印出来 编辑:为了澄清,my_list将是未知的,“X”值可能以
my_list = ["A", "B", "C", "X", "X", "X"]
我想用另一个列表中的值或2D列表中的值替换X值(该列表生成时重复编号等于列表中“X”的编号):
所以
我的问题是如何用组合中的值替换My_list
中的“X”值,这样第一个结果将是[“A”、“B”、“C”、“L”、“L”、“L”]
和第二个结果[“A”、“B”、“C”、“L”、“L”、“E”]
等。我最好将它们放入一个2D列表中,然后打印出来
编辑:为了澄清,my_list
将是未知的,“X”值可能以未知方式分散 试试这个:
my_list = ['A', 'B', 'C', 'X', 'X', 'X']
new_list = [my_list[:3] + list(c) for c in itertools.product('LE',repeat=3)]
[['A', 'B', 'C', 'L', 'L', 'L'],
['A', 'B', 'C', 'L', 'L', 'E'],
['A', 'B', 'C', 'L', 'E', 'L'],
['A', 'B', 'C', 'L', 'E', 'E'],
['A', 'B', 'C', 'E', 'L', 'L'],
['A', 'B', 'C', 'E', 'L', 'E'],
['A', 'B', 'C', 'E', 'E', 'L'],
['A', 'B', 'C', 'E', 'E', 'E']]
要获取my_列表中“X”的编号,请执行以下操作:
count = len(filter(lambda v: v == 'X',my_list))
我可以使用:
def mergefill(to_fill, fill_char, fill_from):
for filler in fill_from:
it = iter(filler)
yield [c if c != fill_char else next(it) for c in to_fill]
给
>>> my_list = ["A", "B", "C", "X", "X", "X"]
>>> list(mergefill(my_list, 'X', product('LE', repeat=3)))
[['A', 'B', 'C', 'L', 'L', 'L'], ['A', 'B', 'C', 'L', 'L', 'E'], ['A', 'B', 'C', 'L', 'E', 'L'], ['A', 'B', 'C', 'L', 'E', 'E'], ['A', 'B', 'C', 'E', 'L', 'L'], ['A', 'B', 'C', 'E', 'L', 'E'], ['A', 'B', 'C', 'E', 'E', 'L'], ['A', 'B', 'C', 'E', 'E', 'E']]
它还处理填充字符不连续的情况:
>>> my_list = ["A", "X", "B", "X"]
>>> list(mergefill(my_list, 'X', product('LE', repeat=2)))
[['A', 'L', 'B', 'L'], ['A', 'L', 'B', 'E'], ['A', 'E', 'B', 'L'], ['A', 'E', 'B', 'E']]
非常感谢,这正是我想要的。
>>> my_list = ["A", "B", "C", "X", "X", "X"]
>>> list(mergefill(my_list, 'X', product('LE', repeat=3)))
[['A', 'B', 'C', 'L', 'L', 'L'], ['A', 'B', 'C', 'L', 'L', 'E'], ['A', 'B', 'C', 'L', 'E', 'L'], ['A', 'B', 'C', 'L', 'E', 'E'], ['A', 'B', 'C', 'E', 'L', 'L'], ['A', 'B', 'C', 'E', 'L', 'E'], ['A', 'B', 'C', 'E', 'E', 'L'], ['A', 'B', 'C', 'E', 'E', 'E']]
>>> my_list = ["A", "X", "B", "X"]
>>> list(mergefill(my_list, 'X', product('LE', repeat=2)))
[['A', 'L', 'B', 'L'], ['A', 'L', 'B', 'E'], ['A', 'E', 'B', 'L'], ['A', 'E', 'B', 'E']]