복붙노트

[PYTHON] 빈 목록에 "all"및 "any"결과를 표시하는 이유

PYTHON

빈 목록에 "all"및 "any"결과를 표시하는 이유

파이썬에서 내장 함수 all과 any는 각각 빈 iterable에 대해 True와 False를 반환합니다. 나는 그것이 다른 방향이라면이 질문에 여전히 질문 할 수 있다는 것을 깨닫는다. 그러나 왜 그 특정한 행동이 선택되었는지 알고 싶습니다. 그것은 임의적 이었습니까? 다른 방식으로도 쉽게 사용할 수 있었습니까? 근본적인 이유가 있습니까?

(내가 묻는 이유는 단순히 어떤 것을 기억하지 못하기 때문이며, 내가 그 뒤에있는 이유를 알고 있다면 나는 호기심을 느낀다.)

해결법

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

    1.어때?

    어때?

    양말 서랍장을 가지고 있지만 현재 비어 있습니다. 검은 색 양말이 포함되어 있습니까? 아니요. 양말이 전혀 없으므로 흑인이 아닙니다. 분명히 any ([])는 false를 반환해야합니다. true를 반환하면 반 직관적입니다.

    모두를위한 경우 ([])는 약간 더 어렵습니다. 공허한 진실에 대한 Wikipedia 기사를 참조하십시오. 또 다른 비유 : 만약 방에 사람이 없다면 그 방의 모든 사람들은 불어를 말할 수 있습니다.

    수학적으로 모두 ([])를 쓸 수 있습니다 :

    공백 진술이 진실인지 아닌지에 대해 상당한 논쟁이 있지만 논리적 관점에서 볼 때 가장 이해가됩니다.

    또한 기사에서 :

    파이썬에서 false를 반환하는 "진공적인 진실"성명을 정의하는 것은 최소한의 놀라움의 원칙에 위배됩니다.

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

    2.어떤 것의 하나의 속성은 재귀적인 정의이다.

    어떤 것의 하나의 속성은 재귀적인 정의이다.

    any([x,y,z,...]) == (x or any([y,z,...]))
    

    그 의미는

    x == any([x]) == (x or any([]))
    

    어떤 것이나 ([])가 False로 정의 된 경우에만 평등은 모든 x에 대해 정확합니다. 모두에게 비슷합니다.

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

    3.나는 모두 ([]) == True가 일반적으로 이해하기가 더 어렵다는 것을 믿습니다. 그래서 여기서 행동이 명백하게 올바른 것이라고 생각하는 예제 모음입니다 :

    나는 모두 ([]) == True가 일반적으로 이해하기가 더 어렵다는 것을 믿습니다. 그래서 여기서 행동이 명백하게 올바른 것이라고 생각하는 예제 모음입니다 :

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

    4.Perl 6은 또한 빈리스트에있는 all ()과 any ()가 각각의 축소 연산자에 대해 정상적인베이스 케이스 역할을해야하므로 all ()이 true이고 any ()가 false라는 입장을 취합니다.

    Perl 6은 또한 빈리스트에있는 all ()과 any ()가 각각의 축소 연산자에 대해 정상적인베이스 케이스 역할을해야하므로 all ()이 true이고 any ()가 false라는 입장을 취합니다.

    다시 말하면, (a, b, c)는 모두 && a, b, c와 동일하고 & b & c ( "junctive and"연산자의 감소, 그러나 접합점과 논리적이며이 게시물에 대해 고려해보십시오.) 그리고 any (a, b, c)는 [|] a, b, c와 동일합니다. b | c ( "junctive or"연산자에 대한 감소 - 다시 한 번 논리적으로나 누락없이 동일하다고 가장 할 수 있습니다.)

    감소를 적용 할 수있는 연산자는 0 항을 줄일 때 정의 된 동작을 가져야하며 대개 자연 항등 요소를 사용하여 수행됩니다. 예를 들어 [+] () (제로 조건을 통한 추가 감소)는 다음과 같습니다. 0은 부가적인 ID이기 때문에 0; 모든 표현식에 0을 추가하면 변경되지 않습니다. [*] ()도 1이 multiplicative identity이므로 1과 같습니다. 우리는 이미 모든 것이 [&]와 동등하다고 말했고 어떤 것은 [|]와 동등합니다 - 글쎄, 진실은 신원이고 거짓은 신원 -x이고 참은 x이고 x 또는 거짓은 x입니다. 이것은 all ()이 참이어야하고 any ()가 거짓이어야한다는 것을 피할 수 없게 만듭니다.

    완전히 다른 (그러나 실용적인) 견해를 나타 내기 위해 어떤 것은 진실을 알게 될 때 거짓으로 시작하여 사실이되는 래치입니다. 모두는 진실을 시작하고 틀린 것을 볼 때마다 거짓이되는 래치입니다. 그들에게 아무런 논쟁을하지 않는다는 것은 그들에게 국가를 바꿀 기회가 주어지지 않는다는 것을 의미하므로 단순히 "기본"상태가 무엇인지 묻는 것입니다. :)

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

    5.나는이 방법으로 구현 된 것으로 생각한다.

    나는이 방법으로 구현 된 것으로 생각한다.

    def all(seq):
        for item in seq:
            if not item:
                return False
        return True
    
    def any(seq):
        for item in seq:
            if item:
                return True
        return False
    

    그들이 그런 식으로 구현되었는지 확신하지 못함

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

    6.일반적으로 GvR이 ABC에서 gnibbler 및 참조 quanifier와 같은 샘플 구현을 제안하는 블로그 게시물은 다음과 같습니다.

    일반적으로 GvR이 ABC에서 gnibbler 및 참조 quanifier와 같은 샘플 구현을 제안하는 블로그 게시물은 다음과 같습니다.

  7. ==============================

    7.모든 것은 파이썬에서 다른 모든 곳과 같은 의미를가집니다.

    모든 것은 파이썬에서 다른 모든 곳과 같은 의미를가집니다.

  8. ==============================

    8.이것은 정말로 더 많은 코멘트이지만, 주석의 코드는 잘 작동하지 않습니다.

    이것은 정말로 더 많은 코멘트이지만, 주석의 코드는 잘 작동하지 않습니다.

    any ()와 all ()이하는 것처럼 작동하는 이유에 대한 다른 논리적 인 기반 외에도이 관계가 성립하도록 반대되는 "기본"사례가 있어야합니다.

    all(x for x in iterable) == not any(not x for x in iterable)
    

    iterable이 길이가 0 인 경우 위의 내용은 여전히 ​​유효합니다. 따라서

    all(x for x in []) == not any(not x for x in [])
    

    이는

    all([]) == not any([])
    

    그리고 어떤 것이 사실이라면 그것은 놀랄 것입니다.

  9. ==============================

    9.공식적인 이유는 분명하지 않지만 문서 (@ John La Rooy의 게시물 확인)에서 확인하십시오.

    공식적인 이유는 분명하지 않지만 문서 (@ John La Rooy의 게시물 확인)에서 확인하십시오.

    CPython 구현 및 주석을 참조하십시오.

  10. from https://stackoverflow.com/questions/3275058/reason-for-all-and-any-result-on-empty-lists by cc-by-sa and MIT license