[python] 다음 항목 중 하나가 목록에 있는지 확인하는 방법은 무엇입니까?

다음 항목 중 하나라도 목록에 있는지 확인할 수있는 간단한 방법을 찾으려고하지만 첫 번째 시도가 작동하지 않습니다. 이를 수행하는 함수를 작성하는 것 외에도 여러 항목 중 하나가 목록에 있는지 확인하는 짧은 방법입니다.

>>> a = [2,3,4]
>>> print (1 or 2) in a
False
>>> print (2 or 1) in a
True



답변

>>> L1 = [2,3,4]
>>> L2 = [1,2]
>>> [i for i in L1 if i in L2]
[2]


>>> S1 = set(L1)
>>> S2 = set(L2)
>>> S1.intersection(S2)
set([2])

빈 목록과 빈 세트는 모두 False이므로 값을 직접 진리 값으로 사용할 수 있습니다.


답변

아, 토비아스 당신이 날 이겼어요. 귀하의 솔루션 에서이 약간의 변형을 생각하고있었습니다.

>>> a = [1,2,3,4]
>>> b = [2,7]
>>> print(any(x in a for x in b))
True


답변

아마도 좀 더 게으르다.

a = [1,2,3,4]
b = [2,7]

print any((True for x in a if x in b))


답변

코드가 실제로 말하는 것을 생각하십시오!

>>> (1 or 2)
1
>>> (2 or 1)
2

아마 그것을 설명해야합니다. 🙂 파이썬은 분명히 “게으른 것”을 구현합니다. 다음과 같이 수행합니다.

def or(x, y):
    if x: return x
    if y: return y
    return False

첫 번째 예 x == 1y == 2. 두 번째 예에서는 그 반대입니다. 따라서 순서에 따라 다른 값을 반환합니다.


답변

a = {2,3,4}
if {1,2} & a:
    pass

코드 골프 버전. 적절하다면 세트 사용을 고려하십시오. 나는 이것이 목록 이해력보다 더 읽기 쉽다는 것을 안다.


답변

목록 이해없이 한 줄.

>>> any(map(lambda each: each in [2,3,4], [1,2]))
True
>>> any(map(lambda each: each in [2,3,4], [1,5]))
False
>>> any(map(lambda each: each in [2,3,4], [2,4]))
True


답변

내가 생각해 낼 수있는 최선 :

any([True for e in (1, 2) if e in a])