[python] 목록의 모든 값이 특정 숫자보다 큰지 확인하십시오.

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



답변

생성기 표현식과 함께 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) 아래의 값을, 당신은 반환 하고, 반환FalseTrue 이 반대 증거를 찾을 수없는 경우입니다.

마찬가지로 any()함수 를 사용하여 하나 이상의 값이 조건과 일치 하는지 테스트 할 수 있습니다 .


답변

… 사용할 수없는 이유가 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

이것이 정확히 당신이 원하는 것인지 모르겠지만 기술적으로 이것은 당신이 요청한 것입니다.


답변

내장 기능이 있습니다 all.

all (x > limit for x in my_list)

모든 숫자보다 더 큰 값을 제한합니다.


답변

다음을 사용할 수 있습니다 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'

여기에는 30 이상이 아닌 30 이상인 모든 숫자가 포함됩니다.


답변

np.sum, np.min을 사용하는 것 사이의 전반적인 승자는 대형 배열의 속도 측면에서 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)

(함수 안에 np.array 정의를 넣어야합니다. 그렇지 않으면 np.min 함수가 값을 기억하고 timeit으로 속도를 테스트 할 때 계산을 다시 수행하지 않습니다)

“all”의 성능은 기준을 충족하지 않는 첫 번째 요소가 발견되는시기에 따라 크게 달라집니다. np.sum은 약간의 작업을 수행해야하며 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

그러나 “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

하지만 사용

np.sum(my_list<x)

x 아래에 얼마나 많은 값이 있는지 알고 싶을 때 매우 유용 할 수 있습니다.


답변

다음을 수행 할 수 있습니다.

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()

30보다 큰 값은 True로, 더 작은 값은 False로 반환합니다.


답변

이 함수를 작성합니다

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

그때

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

min ()의 빈 목록은 ValueError를 발생시킵니다. 그래서 if not x조건을 추가 했습니다.