列表

时间:2016-04-19 14:28:55

标签: python list

我有一个我正在浏览的程序和本节

temp = [1,2,3,4,5,6]
temp[temp!=1]=0
print temp

如果运行会给出结果:

[1, 0, 3, 4, 5, 6]

我需要帮助了解导致此结果的代码中发生了什么。

3 个答案:

答案 0 :(得分:10)

您的示例中的

templist,显然不等于1.因此表达式

 temp[temp != 1] = 0

实际上是

temp[True] = 0  # or, since booleans are also integers in CPython
temp[1] = 0

temp转换为NumPy数组以获得所需的广播行为

>>> import numpy as np
>>> temp = np.array([1,2,3,4,5,6])
>>> temp[temp != 1] = 0
>>> temp 
array([1, 0, 0, 0, 0, 0])

答案 1 :(得分:4)

如前所述,您正在使用比较结果将第二个元素设置为返回True / 1为bool is a subclass of int的列表。你有一个列表而不是一个numpy数组,所以你需要迭代它,如果你想改变它,你可以使用 if / els e逻辑进行列表理解:

temp = [1,2,3,4,5,6]
temp[:] = [0 if ele != 1 else ele for ele in temp ]

哪个会给你:

[1, 0, 0, 0, 0, 0]

或使用生成器表达式

temp[:] = (0 if ele != 1 else ele for ele in temp)

答案 2 :(得分:3)

如果NumPy不是一个选项,请使用列表推导来构建新列表。

>>> temp = [1,2,3,4,5,6]
>>> [int(x == 1) for x in temp]
[1, 0, 0, 0, 0, 0]