【发布时间】:2021-12-21 09:14:30
【问题描述】:
如何删除重复项
if a < 2 or b < 2 or c < 2 or d < 2:
pass #logic
我想删除重复。像这样的:
if (a,b,c,d) < 2:
pass #logic
【问题讨论】:
-
您可能想要使用列表或字典而不是变量序列。这将允许您使用循环和推导。
标签: python if-statement
如何删除重复项
if a < 2 or b < 2 or c < 2 or d < 2:
pass #logic
我想删除重复。像这样的:
if (a,b,c,d) < 2:
pass #logic
【问题讨论】:
标签: python if-statement
另一种稍微不同的方法是检查最小变量是否小于目标值。换句话说,如果最小变量 不 小于目标 - 那么肯定没有一个是:
if min(a, b, c, d) < 2:
# do something
然而,这实际上需要在幕后找到最小值,并且失去了将 any 与生成器表达式一起使用的短路优势。
【讨论】:
我不会像其他答案所建议的那样仅仅为此导入numpy。这可能是矫枉过正。
我会这样做:
condition = lambda x: x < 2
if any(condition(x) for x in (a, b, c, d)):
# whatever you want
或者更紧凑(但可重用性更低):
if any(x < 2 for x in (a, b, c, d)):
# whatever you want
【讨论】:
使用 numpy 时,可以使用 .all() 和 .any() 来完成:
import numpy as np
array = np.asarray([1,2,3])
if (array < 2).any():
print('True')
else:
print('False')
#output: True
if (array < 2).all():
print('True')
else:
print('False')
#output: False
【讨论】:
除了其他答案,使用generator expression减少计算时间
if True in (i < 2 for i in [a,b,c,d]):
pass #logic
【讨论】:
any(...) 比True in (...) 更惯用。
我会在这里使用 Numpy 和 any 的组合。
例如:
a, b, c, d = 10, 10, 10, 10
将其转换为 numpy 数组:
import numpy as np
arr = np.array([a, b, c, d])
现在你可以这样做了:
if any(arr < 2):
pass #logic
【讨论】:
使用内置any函数:
if any(map(lambda x: x < 2, (a, b, c, d))):
pass # whatever here
【讨论】:
filter。 len(filter(lambda x: x>=2, (a, b, c, d))) == 0
len(filter(lambda x: x<2, (a, b, c, d))) != 0 会起作用,但似乎是不必要的复杂化