다음 항목 중 하나라도 목록에 있는지 확인할 수있는 간단한 방법을 찾으려고하지만 첫 번째 시도가 작동하지 않습니다. 이를 수행하는 함수를 작성하는 것 외에도 여러 항목 중 하나가 목록에 있는지 확인하는 짧은 방법입니다.
>>> 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 == 1
와 y == 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])