我有一个我正在浏览的程序和本节
temp = [1,2,3,4,5,6]
temp[temp!=1]=0
print temp
如果运行会给出结果:
[1, 0, 3, 4, 5, 6]
我需要帮助了解导致此结果的代码中发生了什么。
答案 0 :(得分:10)
temp
是list
,显然不等于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]