code

목록의 모든 값이 특정 값보다 큰지 확인합니다.

starcafe 2023. 10. 20. 13:53
반응형

목록의 모든 값이 특정 값보다 큰지 확인합니다.

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

제너레이터 식과 함께 함수를 사용합니다.

>>> 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그 반대의 증거를 찾지 못했다면 말입니다

마찬가지로 이 함수를 사용하여 적어도 하나의 값이 조건과 일치하는지 검정할 수 있습니다.

...당신이 사용할 수 없는 이유가 무엇이든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 함수는 값을 기억하고 시간에 따라 속도를 테스트할 때 다시 계산을 하지 않습니다.)

"모두"의 성능은 기준을 만족하지 않는 첫 번째 요소가 언제 발견되는지, np.sum이 약간의 연산을 수행해야 하는지, np.min이 일반적인 경우 계산 측면에서 가장 가볍습니다.

기준이 거의 즉시 충족되고 모든 루프가 빠르게 종료될 때 모든 함수는 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

하지만 "모든"이 모든 포인트를 통과해야 할 때, 그것은 확실히 훨씬 더 나쁘고, 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 아래에 몇 개의 값이 있는지 알고 싶습니다.

numpy array와 모든 기능을 기반으로 하는 솔루션:

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

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

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컨디션이 좋은

 a = [[a, 2], [b, 3], [c, 4], [d, 5], [a, 1], [b, 6], [e, 7], [h, 8]]

위에서부터 이것이 필요합니다.

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

언급URL : https://stackoverflow.com/questions/20229822/check-if-all-values-in-list-are-greater-than-a-certain-number

반응형