我想在没有在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中执行此操作的最佳方法是什么?
你需要 -
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”方式来做到这一点
列表推导提供了创建列表的简明方法。常见的应用是创建新的列表,其中每个元素是应用于另一个序列的每个成员或可迭代的一些操作的结果,或者创建满足特定条件的那些元素的子序列。
你使用案例就是这样:)
如果您正在使用数值数组,可能值得查看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. ]
到目前为止,我发现的最佳答案是枚举和遍历数组,使用python运算符作为阈值或比较逻辑。
关键是将索引元素乘以逻辑比较。例如
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]
希望有人帮助!