반응형
파이썬은“만약 x에 a | b | c | d…”를 포함하는 것을 표현하는 더 깨끗한 방법을 가지고 있습니까?
이 질문에 이미 답변이 있습니다.
문자열 x
이 하위 문자열 인지 확인하는 Pythonic 방법 y
은 다음과 같습니다.
if x in y:
경우 찾기 x
와 동일로 a
, b
, c
, d
, e
, f
나 g
또한 파이썬입니다 :
if x in [a,b,c,d,e,f,g]:
일부 문자열하지만 검사 x
중 하나를 포함 a
, b
, c
, d
, e
, f
또는 g
어설픈 것 같다 :
if a in x or b in x or c in x or d in x or e in x or f in x or g in x
문자열 에 목록 요소가 포함되어 있는지 확인 하는 더 파이썬적인 방법이 x
있습니까?
루프를 사용하거나 정규식을 사용하여 직접 작성하는 것이 간단하다는 것을 알고 있습니다.
re.search('(dog|cat|bird|mouse|elephant|pig|cow)', x)
하지만 정규식을 포함하지 않는 더 깨끗한 방법이 있는지 궁금합니다.
Pythonic 접근 방식은 다음을 사용하는 것입니다 any()
.
if any(s in x for s in (a,b,c,d,e,f,g)):
링크 된 문서에서 :
any
( 반복 가능 )이터 러블의 요소 가 true이면 True를 반환 합니다. 이터 러블이 비어 있으면 False를 반환합니다. 다음과 동일 :
def any(iterable): for element in iterable: if element: return True return False
또한 여기에 목록 대신 튜플을 사용했습니다. a
- g
값이 미리 정의되어 있으면 튜플이 실제로 선호됩니다. 참조 : 튜플이 Python의 목록보다 효율적입니까?
if any(q in x for q in [a,b,c,d,e,f,g]):
나는 그것이 당신이 얻을 수있는 한 짧고 Pythonic이라고 생각합니다.
파티에 조금 늦었지만
not frozenset(x).isdisjoint(frozenset(y))
작동하고 더 빠를 수 있습니다 (알고리즘 적으로,하지만 더 작은 테스트 케이스에서는 그렇지 않을 수 있음).
사용하지 않고 any
간단하게max
def is_in(symbol, lst):
return max([symbol in x for x in lst])
print is_in('a',['ae','br','tl'])
print is_in('c',['ae','br','tl'])
준다
>>>
True
False
반응형
'programing' 카테고리의 다른 글
Mocha에서 발생한 오류 테스트 (0) | 2020.10.26 |
---|---|
객체 속성 및 JSON.stringify 정렬 (0) | 2020.10.26 |
MACRO + 0! = 0을 사용하는 이유 (0) | 2020.10.26 |
LINQ를 사용하여 목록에서 중복을 계산하는 방법 (0) | 2020.10.26 |
Visual Studio 2010 : 솔루션에서 프로젝트 빌드 순서를 적용하는 방법은 무엇입니까? (0) | 2020.10.26 |