我想在没有在Python中编写'If语句'的情况下进行内联比较。如果值满足阈值条件,则应保持不变。如果不是,则该值应设置为0.
在Python中,我似乎不允许直接将布尔运算符应用于列表。在Matlab中,'True'给出'1'和'False'在数组操作中给出零是很方便的。这是类似matlab的,但在python中不起作用(也许会有numpy?)。伪代码示例:
a = [1.5, 1.3, -1.4, -1.2]
a_test_positive = a>0 # Gives [1, 1, 0, 0]
positive_a_only = a.*a>0
期望的结果:
positive_a_only>> [1.5, 1.3, 0, 0]
在python中执行此操作的最佳方法是什么?
答案 0 :(得分:3)
你需要 -
a = [1.5, 1.3, -1.4, -1.2]
positive_a_only = [i if i>0 else 0 for i in a]
print(positive_a_only)
<强>输出强>
[1.5, 1.3, 0, 0]
这被称为List Comprehension 根据您的输入和预期输出,这是一种“pythonic”方式来做到这一点
列表推导提供了创建列表的简明方法。共同 应用程序将创建新列表,其中每个元素都是结果 一些操作应用于另一个序列的每个成员或 可迭代的,或创建满足a的元素的子序列 某种条件。
你的用例是为此做的:)
答案 1 :(得分:1)
如果您正在处理数值数组,可能值得查看Numpy
。
import numpy as np
a = np.array([1.5, 1.3, -1.4, -1.2])
a[a < 0] = 0
# [ 1.5 1.3 0. 0. ]
答案 2 :(得分:0)
到目前为止,我找到的最佳答案是枚举并遍历数组,使用python运算符作为阈值或比较逻辑。
关键是将索引元素乘以逻辑比较。 e.g。
a = 1.5
a_positive = a * (a>0)
print(a)
按预期返回1.5的值,如果a为负,则返回0。
以下是完整列表的示例:
a = [1.5, 1.3 -1.4, -1.2]
for i, element in enumerate(a):
a[i] = element*(element>0)
print(a)
[1.5, -0.0, -0.0]
希望能帮助别人!