如何在列表解析中使用if-else条件来覆盖现有列表?

时间:2016-10-02 16:40:35

标签: python list-comprehension in-place

我正在尝试将大于3的数字乘以2,并从其他所有数据中减去1。但是,列表没有任何反应。 这是我的代码:

lst = [1,2,3,4,5,6,7,8,9,10]

print (lst)

[x*2 if x > 3 else x-1 for x in lst]     

print (lst)

为什么列表推导不会修改 lst 变量的内容?

2 个答案:

答案 0 :(得分:0)

您没有将其重新分配给变量名称。

lst = [1,2,3,4,5,6,7,8,9,10]

print (lst)

lst = [x*2 if x > 3 else x-1 for x in lst]

print (lst)

答案 1 :(得分:0)

列表理解和分配

您错过了作业。像您这样的List comprehensions不会对列表元素进行就地修改。相反,表达式返回一个新列表,因此您必须列表推导表达式的结果分配回变量。例如:

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list = [x*2 if x > 3 else x-1 for x in list]
print(list)

在Ruby中,肯定有执行自变异操作的方法,但我个人并不知道Python等价物会保留您在此处尝试使用的语义。