ProgramingTip

Python : 목록의 모든 항목이 동일한 항목인지 확인

bestdevel 2020. 11. 19. 21:50
반응형

Python : 목록의 모든 항목이 동일한 항목인지 확인


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

일부 코드에서 해당 속성을 목록에 추가 목록을 작성합니다. 이 두 번째 목록의 모든 항목이 값이 무엇인지 미리 알지 정확히 일치하는 값을 장치 지 확인하고 결과에 따라 코드에서 다른 작업을 수행 할 수 있도록 bool을 반환해야합니다.

나는 속성의 이름을 미리 알 수 없기 때문에 가능한 한 일반적인 것을려고 노력하고 있습니다.

"all_same"이라는 이름의 함수는 다음과 같이 작동합니다.

>>> property_list = ["one", "one", "one"]
>>> all_same(property_list)
True
>>> property_list = ["one", "one", "two"]
>>> all_same(property_list)
False

고유 한 요소 목록을 만들 길이가 가장 우아한 솔루션인지 확인했습니다.


def all_same(items):
    return all(x == items[0] for x in items)

예 :

>>> def all_same(items):
...     return all(x == items[0] for x in items)
...
>>> property_list = ["one", "one", "one"]
>>> all_same(property_list)
True
>>> property_list = ["one", "one", "two"]
>>> all_same(property_list)
False
>>> all_same([])
True

당신은 속이고 사용할 수 있습니다 set:

def all_same( items ):
    return len( set( items ) ) == 1 #== len( items )

또는 다음을 사용할 수 있습니다.

def all_same( items ):
    return all( map(lambda x: x == items[0], items ) )

또는 목록 대신 이터 러블을 다루는 경우 :

def all_same( iterable ):
    it_copy = tee( iterable, 1 )
    return len( set( it_copy) ) == 1

나는 원래 당신이 신원 ( "동일한 항목")을 테스트하는 것을 해석했다고 실제로는 평등 ( "동일한 값") 테스트하고 있습니다. (신원을 테스트하는 경우 == 대신 IS사용하십시오 .)

def all_same(items):
  it = iter(items)
  for first in it:
    break
  else:
    return True  # empty case, note all([]) == True
  return all(x == first for x in it)

반복 가능한 모든 항목에서 작동합니다.

def all_same(L):
  return all(x == L[0] for x in L)

(그러나 IMHO, 일반 버전을 사용하는 것이 좋습니다. 목록에서 완벽하게 작동합니다.)


이를 수행하는 가장 좋은 방법은 Python 세트를 사용하는 all_same것입니다. 다음 과 같이 정의해야합니다 .

def all_same(items):
    return len(set(items)) < 2

테스트 :

>>> def all_same(items):
...     return len(set(items)) < 2
... 
>>> 
>>> property_list = ["one", "one", "one"]
>>> all_same(property_list)
True
>>> property_list = ["one", "one", "two"]
>>> all_same(property_list)
False
>>> property_list = []
>>> all_same(property_list)
True

이 시퀀스와 이터 러블 모두에서 작동합니다.

def all_same(items):
  it = iter(items)
  first = next(it, None)
  return all(x == first for x in it)

값이 목록에 있다는 것을 알고 있으면 더 빠를 수 있습니다.

def all_same(values):
    return values.count(values[0]) == len(values)

나는 그것을 생각한 후에 같은 문제에 대해이 코드 스 니펫을 만들었습니다. 그래도 모든 시나리오에서 작동하는지 확실하지 않습니다.

def all_same(list):
    list[0]*len(list) == list

참고 URL : https://stackoverflow.com/questions/3787908/python-determine-if-all-items-of-a-list-are-the-same-item

반응형