O.r*_*rka 59 python function list max
my_list1 = [30,34,56]
my_list2 = [29,500,43]
Run Code Online (Sandbox Code Playgroud)
如何检查列表中的所有值是否> = 30?my_list1应该工作,my_list2不应该.
我唯一能想到的是:
boolean = 0
def func(ls):
for k in ls:
if k >= 30:
boolean = boolean + 1
else:
boolean = 0
if boolean > 0:
print 'Continue'
elif boolean = 0:
pass
Run Code Online (Sandbox Code Playgroud)
事后看来,在处理速度真正重要且利用的更大数据集后numpy......我会这样做:
>>> my_list1 = [30,34,56]
>>> my_list2 = [29,500,43]
>>> import numpy as np
>>> A_1 = np.array(my_list1)
>>> A_2 = np.array(my_list2)
>>> A_1 >= 30
array([ True, True, True], dtype=bool)
>>> A_2 >= 30
array([False, True, True], dtype=bool)
>>> ((A_1 >= 30).sum() == A_1.size).astype(np.int)
1
>>> ((A_2 >= 30).sum() == A_2.size).astype(np.int)
0
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
len([*filter(lambda x: x >= 30, my_list1)]) > 0
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 105
将该all()函数与生成器表达式一起使用:
>>> my_list1 = [30, 34, 56]
>>> my_list2 = [29, 500, 43]
>>> all(i >= 30 for i in my_list1)
True
>>> all(i >= 30 for i in my_list2)
False
Run Code Online (Sandbox Code Playgroud)
请注意,此测试大于或等于 30,否则my_list1也不会通过测试.
如果你想在一个函数中这样做,你可以使用:
def all_30_or_up(ls):
for i in ls:
if i < 30:
return False
return True
Run Code Online (Sandbox Code Playgroud)
例如,一旦您找到证明价值低于30 的值,您就会返回False,True如果您没有找到相反的证据则返回.
同样,您可以使用该any()函数来测试至少1个值是否与条件匹配.
...你不能使用的任何理由min()?
def above(my_list, minimum):
if min(my_list) >= minimum:
print "All values are equal or above", minimum
else:
print "Not all values are equal or above", minimum
Run Code Online (Sandbox Code Playgroud)
我不知道这是不是你想要的,但从技术上讲,这就是你要求的......
您可以使用all():
my_list1 = [30,34,56]
my_list2 = [29,500,43]
if all(i >= 30 for i in my_list1):
print 'yes'
if all(i >= 30 for i in my_list2):
print 'no'
Run Code Online (Sandbox Code Playgroud)
请注意,这包括等于 30 或更高的所有数字,而不是严格高于 30。