有没有一种快速的方法,不涉及大量的 if 语句来获取列表中第一个变量不大于我的元素?例如,如果
x = 50
compare = [1, 4, 9, 16, 25, 36, 49, 64, 81]
我希望这能返回 64。我的列表也是按升序编写的,因此不需要比较列表中的每个元素。
有没有一种快速的方法,不涉及大量的 if 语句来获取列表中第一个变量不大于我的元素?例如,如果
x = 50
compare = [1, 4, 9, 16, 25, 36, 49, 64, 81]
我希望这能返回 64。我的列表也是按升序编写的,因此不需要比较列表中的每个元素。
有一种简单的方法可以做到这一点,不需要任何for
循环:
>>> x = 50
>>> compare = [1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> next(item for item in compare if item >=x)
64
这将创建一个值为>= x
的迭代器,然后选择第一个值。
for
。并且具有相同的时间复杂度。 - jonrsharperesult = None
for el in compare:
if x < el:
result = el
break
if result is not None:
print('Found', result)
else:
print('Not found')
import numpy as np
x = 50
compare = np.array([1, 4, 9, 16, 25, 36, 49, 64, 81] )
compare[compare>=x][0]
while
循环:count = 0
while x < compare[count]:
count += 1
print(compare[count])
next(value for value in compare if value > x)
就可以解决问题。如果数列是递增的,你也可以考虑二分查找。对于特定的数值,还有一种更快的数值方法(平方大于 x 的整数)。 - jonrsharpecompare[bisect.bisect_left(compare, x)]
- 没有'if-statements'. bisect - facehugger