首页 > 解决方案 > 我想在嵌套列表 Python 中追加列表

问题描述

expression = ['+', '10', 'x']
variables = {"x": (3,4)}
new_expression = []

for key, value in variables.items():
    key_index = expression.index(key)
    
    for i in range(3,5):
        expression[key_index] = i
        new_expression.append(expression)
        
print("new_expression",  new_expression)  

结果是 new_expression = [['+', '10', 4], ['+', '10', 4]]

但我想要 new_expression = [['+', '10', 3], ['+', '10', 4]]

标签: pythonlistappendnested-lists

解决方案


更改new_expression.append(expression)new_expression.append(expression[:])可以工作。原因是如果你 append expression,其中的每个元素都new_expression将指向同一个对象。我们需要通过复制来提升一个新对象。

expression = ['+', '10', 'x']
variables = {"x": (3,4)}
new_expression = []

for key, value in variables.items():
    key_index = expression.index(key)
    
    for i in range(3,5):
        expression[key_index] = i
        new_expression.append(expression[:])
        
print("new_expression",  new_expression)  

您可能想要更改for i in range(3,5):for i in value:,因为您已经在 中定义了值variables

精制版:

expression_template = ['+', '10', 'x']
variables = {"x": (3,4)}
new_expression = []

for key, value in variables.items():
    key_index = expression_template.index(key)
    
    for i in value:
        expression = expression_template[:]
        expression[key_index] = i
        new_expression.append(expression)
        
print("new_expression",  new_expression)

推荐阅读