检查列表中的所有值是否大于某个数字

新手上路,请多包涵
my_list1 = [30,34,56]
my_list2 = [29,500,43]

如何检查列表中的所有值是否> = 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

2016 年更新:

事后看来,在处理了速度实际上很重要的更大数据集并利用 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

您还可以执行以下操作:

 len([*filter(lambda x: x >= 30, my_list1)]) > 0

原文由 O.rka 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

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

请注意,此测试大于 或等于 30,否则 my_list1 也不会通过测试。

如果您想在函数中执行此操作,您可以使用:

 def all_30_or_up(ls):
    for i in ls:
        if i < 30:
            return False
    return True

例如,一旦你找到一个值证明有 一个 值低于 30,你就返回 False ,如果你没有发现相反的证据,则返回 True

同样,您可以使用 any() 函数 来测试是否 至少有 1 个 值与条件匹配。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

…您不能使用 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

我不知道这是否正是您想要的,但从技术上讲,这就是您要求的…

原文由 Roberto 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题