简体   繁体   English

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

[英]Check if all values in list are greater than a certain number

my_list1 = [30,34,56]
my_list2 = [29,500,43]

How to I check if all values in list are >= 30?如何检查列表中的所有值是否> = 30? my_list1 should work and my_list2 should not. my_list1应该可以工作,而my_list2不应该。

The only thing I could think of doing was:我唯一能想到的就是:

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

Update 2016: 2016 年更新:

In hindsight, after dealing with bigger datasets where speed actually matters and utilizing numpy ...I would do this:事后看来,在处理了速度实际上很重要的更大数据集并利用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

You could also do something like:您还可以执行以下操作:

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

Use the all() function with a generator expression: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

Note that this tests for greater than or equal to 30, otherwise my_list1 would not pass the test either.请注意,此测试大于或等于30,否则my_list1也不会通过测试。

If you wanted to do this in a function, you'd use:如果您想在函数中执行此操作,您可以使用:

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

eg as soon as you find a value that proves that there is a value below 30, you return False , and return True if you found no evidence to the contrary.例如,一旦您发现一个值证明存在低于 30值,您就返回False ,如果您没有发现相反的证据,则返回True

Similarly, you can use the any() function to test if at least 1 value matches the condition.同样,您可以使用any()函数来测试是否至少有 1 个值与条件匹配。

...any reason why you can't use min() ? ...有什么理由不能使用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

I don't know if this is exactly what you want, but technically, this is what you asked for...我不知道这是否正是您想要的,但从技术上讲,这就是您要求的...

There is a builtin function all :有一个内置函数all

all (x > limit for x in my_list)

Being limit the value greater than which all numbers must be.限制大于所有数字必须的值。

You can use all() :您可以使用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'

Note that this includes all numbers equal to 30 or higher, not strictly above 30.请注意,这包括所有等于或大于 30 的数字,而不是严格大于 30 的数字。

The overall winner between using the np.sum, np.min, and all seems to be np.min in terms of speed for large arrays:就大型阵列的速度而言,使用 np.sum、np.min 和 all 的总体赢家似乎是 np.min:

N = 1000000
def func_sum(x):
    my_list = np.random.randn(N)
    return np.sum(my_list < x )==0

def func_min(x):
    my_list = np.random.randn(N)
    return np.min(my_list) >= x

def func_all(x):
    my_list = np.random.randn(N)
    return all(i >= x for i in my_list)

(i need to put the np.array definition inside the function, otherwise the np.min function remembers the value and does not do the computation again when testing for speed with timeit) (我需要将 np.array 定义放在函数中,否则 np.min 函数会记住该值并且在使用 timeit 测试速度时不会再次进行计算)

The performance of "all" depends very much on when the first element that does not satisfy the criteria is found, the np.sum needs to do a bit of operations, the np.min is the lightest in terms of computations in the general case. “all”的性能很大程度上取决于何时找到第一个不满足条件的元素,np.sum需要做一些运算,一般情况下np.min在计算方面是最轻的.

When the criteria is almost immediately met and the all loop exits fast, the all function is winning just slightly over np.min:当几乎立即满足条件并且 all 循环快速退出时, all 函数比 np.min 略胜一筹:

>>> %timeit func_sum(10)
10 loops, best of 3: 36.1 ms per loop

>>> %timeit func_min(10)
10 loops, best of 3: 35.1 ms per loop

>>> %timeit func_all(10)
10 loops, best of 3: 35 ms per loop

But when "all" needs to go through all the points, it is definitely much worse, and the np.min wins:但是当“all”需要把所有的点都过一遍的时候,肯定差很多,np.min胜出:

>>> %timeit func_sum(-10)
10 loops, best of 3: 36.2 ms per loop

>>> %timeit func_min(-10)
10 loops, best of 3: 35.2 ms per loop

>>> %timeit func_all(-10)
10 loops, best of 3: 230 ms per loop

But using但是使用

np.sum(my_list<x)

can be very useful is one wants to know how many values are below x.可能非常有用的是,您想知道 x 以下有多少个值。

You could do the following:您可以执行以下操作:

def Lists():

    my_list1 = [30,34,56]
    my_list2 = [29,500,43]

    for element in my_list1:
        print(element >= 30)

    for element in my_list2:
        print(element >= 30)

Lists()

This will return the values that are greater than 30 as True, and the values that are smaller as false.这会将大于 30 的值返回为 True,将小于 30 的值返回为 false。

I write this function我写这个函数

def larger(x, than=0):
    if not x or min(x) > than:
        return True
    return False

Then然后

print larger([5, 6, 7], than=5)  # False
print larger([6, 7, 8], than=5)  # True
print larger([], than=5)  # True
print larger([6, 7, 8, None], than=5)  # False


Empty list on min() will raise ValueError. min()上的空列表将引发 ValueError。 So I added if not x in condition.所以我在条件中添加了if not x

A solution based on numpy array and all function:基于 numpy 阵列和所有 function 的解决方案:

my_list1 = [30, 34, 56]
my_list2 = [29, 500, 43]
#
import numpy as np
all(np.array(my_list1)>=30)
Output: True
all(np.array(my_list2)>=30)
Output: False
 a = [[a, 2], [b, 3], [c, 4], [d, 5], [a, 1], [b, 6], [e, 7], [h, 8]]

I need this from above one我需要上面的这个

 a = [[a, 3], [b, 9], [c, 4], [d, 5], [e, 7], [h, 8]]
a.append([0, 0])
for i in range(len(a)):
     for j in range(i + 1, len(a) - 1):
            if a[i][0] == a[j][0]:
                    a[i][1] += a[j][1]
                    del a[j]
a.pop()
        

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 列表中大于某个数字的值的数量 - number of values in a list greater than a certain number 检查列表的所有值是否都小于某个数字(如果未将其设置为该数字) - Check if all values of a list are less than a certain number, if not set it to that number 检查列表中的所有值是否都大于特定数字x且小于y? - Check if all values in a list are bigger than certain number x and smaller than y? 在计算大于和小于列表中某些值的值的数量时会跳过一些数字 - Some numbers are skipped in counting number of values greater and less than certain values in a list 列表中大于平均值的数值 - Number values in a list greater than the average 如果数据存储在numpy数组中,如何取所有大于某个数值的中位数? - How to take a median of all the values greater than a certain number if the data is stored in a numpy array? 如何检查列表中的数字是否大于它之前的数字-python - How to check if a number in a list is greater than the number before it - python 计算字典中大于Python中某个数字的值? - Counting values in a dictionary that are greater than a certain number in Python? 如果差值大于某个值,则在列表中保留连续数字 - Keep consecutive number in list if the difference greater than a certain value 检查字符串是否为大于 1 的数字 - Check if a string is a number greater than 1
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM