2014-03-07 3 views
6

내가이 목록을 가지고 있다면;목록의 모든 요소가 동일한 지 어떻게 확인합니까?

mylist = ['n', 'n', '4', '3', 'w'] 

어떻게 목록을 읽고 모두 같는지 말해 주시겠습니까?

나는이 예제에서 모두 동일하지 않다는 것을 쉽게 알 수 있음을 알고 있습니다. 나는 그것이 나를 위해 읽을 수있는 훨씬 더 큰 목록을 가지고있다.

나는이 사용에 대한 가시겠습니까 :

min(...) 

그렇다면, 어떻게 것 I는 입력 각 목록 항목을?

답변

13

님이

len(set(mylist)) == 1 

설명처럼

세트 그들 만의 고유 아이템 상점을 설정할 수 있습니다. 그래서 우리는 목록을 세트로 변환하려고 시도합니다. 변환 후에 집합에 둘 이상의 요소가있는 경우 목록의 모든 요소가 동일하지 않다는 의미입니다.

참고 : 목록에 목록 (사용자 지정 클래스 등)과 같이 해쉬 할 수없는 항목이있는 경우 set 메서드를 사용할 수 없습니다. 그것은 심지어이 글은 다른 임시 객체를 생성하지 않습니다

  • unhashable 종류의 작동

    1. :하지만 우리는 @falsetru가 제시 한 첫 번째 방법,

      all(x == mylist[0] for x in mylist) 
      

      장점을 사용할 수 있습니다 기억.

    2. 처음 실패한 후 단락됩니다. 첫 번째와 두 번째 요소가 일치하지 않으면 즉시 False을 반환하지만 set 접근법에서는 모든 요소를 ​​비교해야합니다. 따라서 목록이 거대한 경우 all 접근 방식을 선호해야합니다.

    3. 목록이 실제로 비어있는 경우에도 작동합니다. 반복 가능 요소에 요소가 없으면 allTrue을 반환합니다. 그러나 빈 set를 만듭니다 빈리스트가되는 길이는 0

  • +1

    이것은 정말 똑똑합니다. – Tyler

    +0

    내 마음이 좋아지기를 바랍니다. P – Gogo

    +3

    이것은 해시 가능 항목에서만 작동합니다.목록에서이를 수행하면 예를 들어 작동하지 않습니다. –

    6

    allgenerator expression 사용됩니다

    all(x == mylist[0] for x in mylist) 
    

    대안 :

    mylist.count(mylist[0]) == len(mylist) 
    

    참고 첫 번째 목록에 다른 항목이있는 것을 발견하자마자 멈출 것입니다. 대안은 그렇지 않습니다.

    +2

    +1 : 조기 정지의 경우 – tom10

    +1

    나는'.count'가 조금 더 안정적이고 견고하다는 것을 알게되었습니다. +1 다른 방법을 제안! – 3kstc

    관련 문제