我有一个正在查看的程序和这一部分
temp = [1,2,3,4,5,6]
temp[temp!=1]=0
print temp
如果运行给出结果:
[1, 0, 3, 4, 5, 6]
我需要帮助来理解导致此结果的代码中发生了什么。
原文由 user2320239 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个正在查看的程序和这一部分
temp = [1,2,3,4,5,6]
temp[temp!=1]=0
print temp
如果运行给出结果:
[1, 0, 3, 4, 5, 6]
我需要帮助来理解导致此结果的代码中发生了什么。
原文由 user2320239 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如已经解释过的那样,您正在使用与返回 True/1 的列表进行比较的结果来设置第二个元素,因为 bool 是 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)
原文由 Padraic Cunningham 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答893 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
temp
在你的例子中是一个list
,它显然不等于 1。因此表达式实际上是
将
temp
转换为 NumPy 数组以获得所需的广播行为