programing

파이썬은“만약 x에 a | b | c | d…”를 포함하는 것을 표현하는 더 깨끗한 방법을 가지고 있습니까?

nasanasas 2020. 10. 26. 08:04
반응형

파이썬은“만약 x에 a | b | c | d…”를 포함하는 것을 표현하는 더 깨끗한 방법을 가지고 있습니까?


이 질문에 이미 답변이 있습니다.

문자열 x이 하위 문자열 인지 확인하는 Pythonic 방법 y은 다음과 같습니다.

if x in y:

경우 찾기 x와 동일로 a, b, c, d, e, fg또한 파이썬입니다 :

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

참고 URL : https://stackoverflow.com/questions/19714041/does-python-have-a-cleaner-way-to-express-if-x-contains-abcd

반응형