파이썬 any () 함수는 정확히 어떻게 작동합니까?


113

에 대한 Python 문서 페이지 any에서 any()함수에 해당하는 코드 는 다음과 같습니다.

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

이 함수는이 형식으로 호출하면 테스트 할 요소를 어떻게 알 수 있습니까?

any(x > 0 for x in list)

함수 정의에서 볼 수있는 것은 반복 가능한 객체를 전달하고 있다는 것뿐입니다. for루프는 내가 뭔가를 찾고 있다는 것을 어떻게 알 수 > 0있습니까?

답변:


166

당신이 사용하는 경우 any(lst)당신은보고 lst일부 항목의 목록 인의 반복 가능한 것입니다. 가 포함 된 경우 [0, False, '', 0.0, [], {}, None](모든이의 논리 값이있는 False) 다음 any(lst)이 될 것입니다 False. lst다음 중 하나라도 포함 된 경우 [-1, True, "X", 0.00001](모두로 평가됨 True) any(lst)은입니다 True.

게시 한 코드 x > 0 for x in lst에서 이것은 생성기 표현식 이라는 다른 종류의 반복 가능 항목 입니다. 생성기 표현식이 Python에 추가되기 전에 목록 이해력 을 만들었을 것입니다 . 이는 매우 유사하지만 주변에 []'s :를 사용 [x > 0 for x in lst]합니다. 로부터 lst포함 [-1, -2, 10, -4, 20], 당신이 얻을 것 이해 목록을 : [False, False, True, False, True]. 이 내부 값은 적어도 하나의 값 이 있으므로를 any반환 하는 함수로 전달됩니다 .TrueTrue

그러나 생성기 표현식을 사용 하면 Python은 더 이상 True(s)및의 내부 목록을 False(s)생성 할 필요가 없으며 any생성기 표현식에 의해 한 번에 하나씩 생성 된 값을 함수가 반복 할 때 값이 생성됩니다. 그리고 , 이후로 any는 처음 본다으로 단락, 그것은 바로 반복하는 중지됩니다 True값입니다. 이것은 (또는 Python2.x를 사용하는 경우) lst같은 것을 사용하여 만든 경우 특히 유용합니다 . 이 표현은 억 항목을 통해 생성에도 불구하고, 단지 그것을에 얻을 때 세 번째 항목으로까지 가야 하는 평가하여, 대한 , 그래서 반환 할 수 있습니다 .lst = range(-1,int(1e9))xrangeany1Truex>0anyTrue

list comprehension을 만들었다면 Python은 먼저 메모리에 10 억 개의 요소 목록을 만든 다음이를 any. 그러나 사용하여 발전기 식을 , 당신은 같은 파이썬의 내장 기능을 가질 수 anyallA와 마자, 일찍 중단 True또는 False값을 볼 수 있습니다.


25
그것은 any(x > 0 for x in list)단지 any((x > 0 for x in list)).
georg

3
당신은 추가한다고 None부울 값을 가질 요소의 목록False
알록 마이 소르

2
@georg에 추가하면 구문 설탕은 any. def b(x): return x; print b(x > 1 for x in xs) # prints <generator object ..
industryworker3595112

@georg이 설명에 감사드립니다. 이것은 대괄호로 코드를 테스트 할 때 혼란 스러웠던 정말 중요한 점입니다.
MasayoMusic

39
>>> names = ['King', 'Queen', 'Joker']
>>> any(n in 'King and john' for n in names)
True

>>> all(n in 'King and Queen' for n in names)
False

여러 줄의 코드를 하나로 줄입니다. 다음과 같이 긴 코드를 작성할 필요가 없습니다.

for n in names:
    if n in 'King and john':
       print True
    else:
       print False

23

(x > 0 for x in list) 그 함수 호출에서 생성기 표현식을 생성합니다.

>>> nums = [1, 2, -1, 9, -5]
>>> genexp = (x > 0 for x in nums)
>>> for x in genexp:
        print x


True
True
False
True
False

어느 any첫 번째 개체 평가하는 조우에 사용하고 shortcircuitsTrue


7

iterable이

(x > 0 for x in list)

또는 x > 0하나 를 반환 하므로 부울 반복이 가능합니다.TrueFalse


7

간단히 말해서 any ()는이 작업을 수행합니다. 조건에 따라 목록에서 하나의 충족 값을 만나더라도 true를 반환하고 그렇지 않으면 false를 반환합니다.

list = [2,-3,-4,5,6]

a = any(x>0 for x in lst)

print a:
True


list = [2,3,4,5,6,7]

a = any(x<0 for x in lst)

print a:
False
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.