복붙노트

[PYTHON] 및 / 또는 파이썬에서?

PYTHON

및 / 또는 파이썬에서?

나는 and과 or의 표현식이 파이썬에 존재한다는 것을 알고 있지만, 그리고 / 또는 표현식은 무엇입니까? 또는 a 및 / 또는 표현식과 동일한 효과를 내기 위해 그들을 결합하는 어떤 방법?

내 코드는 다음과 같습니다.

if input=="a":        
    if "a" or "á" or "à" or "ã" or "â" in someList:            
        someList.remove("a") or someList.remove("á") or someList.remove("à") or someList.remove("ã") or someList.remove("â")

이 말은 사용자가 "a"를 입력하고 "a"가 이전에 정의 된 목록에 포함되어 있으면 주어진 목록에서 "a"의 모든 유형을 제거 할 수 있습니까?

파이썬은 문제가 있음을 알려줍니다.

someList.remove("a") or someList.remove("á") or someList.remove("à") or someList.remove("ã") or someList.remove("â")

그는 나에게 말한다 : ValueError : list.remove (x) : x가 목록에 없다.

해결법

  1. ==============================

    1.매트 볼의 대답이 설명하는대로, 또는 "그리고 / 또는". 그러나 위에 사용하는 방식으로 작동하지 않습니다. 당신은 someList의 "a"또는 someList의 "á"또는 .... 아니면 더 나은 아직 말할 필요가 있습니다.

    매트 볼의 대답이 설명하는대로, 또는 "그리고 / 또는". 그러나 위에 사용하는 방식으로 작동하지 않습니다. 당신은 someList의 "a"또는 someList의 "á"또는 .... 아니면 더 나은 아직 말할 필요가 있습니다.

    if any(c in someList for c in ("a", "á", "à", "ã", "â")):
        ...
    

    질문에 대한 답변입니다.

    그러나 게시 한 예제 코드에 대해 몇 가지 더 이야기 할 것이 있습니다. 첫째, someList.remove ... 또는 someList remove ... 명령문의 체인이 불필요하며 예기치 않은 동작이 발생할 수 있습니다. 읽을 것도 어렵습니다! 그것을 개별 라인으로 나누는 것이 더 좋습니다.

    someList.remove("a")
    someList.remove("á")
    ...
    

    그러나 그것은 충분하지 않습니다. 관찰 한대로 항목이 목록에 없으면 오류가 발생합니다. 게다가 제거를 사용하는 것은 매우 느립니다. 호출 할 때마다 파이썬은 목록의 모든 항목을 살펴야하기 때문입니다. 따라서 10 개의 다른 문자를 제거하고 100 자의 목록이있는 경우 1000 개의 테스트를 수행해야합니다.

    대신, 나는 아주 다른 접근법을 제안 할 것이다. 다음과 같이 집합을 사용하여 목록을 필터링하십시오.

    chars_to_remove = set(("a", "á", "à", "ã", "â"))
    someList = [c for c in someList if c not in chars_to_remove]
    

    또는 복사본을 만들지 않고 현재 위치에서 목록을 변경하십시오.

    someList[:] = (c for c in someList if c not in chars_to_remove)
    

    이 두 가지 모두 목록 이해도 구문을 사용하여 새 목록을 만듭니다. 그들은 someList의 모든 문자를보고 문자가 chars_to_remove에 있는지 확인하고 그렇지 않은 경우 문자를 새 목록에 포함시킵니다.

    이것이이 코드의 가장 효율적인 버전입니다. 두 가지 속도 이점이 있습니다.

  2. ==============================

    2.배타적이지 않고 (예 : xor) 그렇게 또는 및 / 또는 동일한 것입니다.

    배타적이지 않고 (예 : xor) 그렇게 또는 및 / 또는 동일한 것입니다.

  3. ==============================

    3.x와 y가 모두 참이면 x와 y는 true를 반환합니다. x 또는 y는 둘 중 하나가 참이면 리턴합니다.

    x와 y가 모두 참이면 x와 y는 true를 반환합니다. x 또는 y는 둘 중 하나가 참이면 리턴합니다.

    이것으로부터 우리는 xOR을 의미하지 않는 한 (또는 if와 true를 제외하고)

  4. ==============================

    4.를 찾습니까...

    를 찾습니까...

    a if b else c
    

    아니면 파이썬의 또는? 진실하거나 진실은 진실하다.

  5. ==============================

    5.업데이트 된 질문의 경우 원하는 것을 다음과 같이 바꿀 수 있습니다.

    업데이트 된 질문의 경우 원하는 것을 다음과 같이 바꿀 수 있습니다.

    someList = filter(lambda x: x not in ("a", "á", "à", "ã", "â"), someList)
    

    필터는 제공된 람다에 전달하여 목록의 모든 요소를 ​​평가합니다. 이 람다에서는 요소가 제공된 문자 중 하나가 아닌지 확인합니다. 요소가 목록에 있어야하기 때문입니다.

    또는 someList의 항목이 고유해야하는 경우 someList를 설정하고 다음과 같이 할 수 있습니다.

    someList = list(set(someList)-set(("a", "á", "à", "ã", "â")))
    

    이것은 본질적으로 당신이 원하는 것을하는 세트들 사이의 차이점을 취하지 만, 모든 요소가 한 번만 발생한다는 것을 확인합니다. 이것은 목록과 다릅니다. 이 경우 처음부터 someList를 집합으로 저장할 수 있으므로 약간 최적화됩니다.

  6. ==============================

    6.이 솔루션을 사용해보십시오.

    이 솔루션을 사용해보십시오.

    for m in ["a", "á", "à", "ã", "â"]:
        try:
            somelist.remove(m)
        except:
            pass
    

    귀하의 정보를 위해서. and 연산자 또는 연산자도 값을 반환하는 데 사용하고 있습니다. 변수에 값을 할당해야하지만 사전 요구 사항이 필요한 경우 유용합니다.

    연산자 또는 첫 번째가 아닌 null 값을 반환합니다.

    #init values
    a,b,c,d = (1,2,3,None)
    
    print(d or a or b or c)
    #output value of a - 1
    
    print(b or a or c or d)
    #output value of b - 2
    

    연산자가 None 값을 갖지 않거나 하나 이상의 None 값을 갖는 경우 시퀀스의 마지막 값을 반환합니다. 없음

    print(a and d and b and c)
    #output: None
    
    print(a or b or c)
    #output value of c - 3
    
  7. ==============================

    7.

    if input == 'a':
        for char in 'abc':
            if char in some_list:
                some_list.remove(char)
    
  8. from https://stackoverflow.com/questions/10149747/and-or-in-python by cc-by-sa and MIT license