반응형
Python : 목록의 모든 항목이 동일한 항목인지 확인
이 질문에 이미 답변이 있습니다.
- 목록의 모든 요소가 동일한 지 확인 (26 개) 답변
일부 코드에서 해당 속성을 목록에 추가 목록을 작성합니다. 이 두 번째 목록의 모든 항목이 값이 무엇인지 미리 알지 정확히 일치하는 값을 장치 지 확인하고 결과에 따라 코드에서 다른 작업을 수행 할 수 있도록 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
반응형
'ProgramingTip' 카테고리의 다른 글
Angular 6 마이그레이션 -.angular-cli.json에서 angular.json으로 (0) | 2020.11.19 |
---|---|
XmlSerializer가 DateTime을 'YYYY-MM-DD hh : mm : ss'로 지정 화합니다. (0) | 2020.11.19 |
`database.yml` 파일 내의 환경 변수에 액세스하지 못함 (0) | 2020.11.19 |
Cloudfront custom-origin 배포가 502 "오류 요청을받을 수 없습니다."를 반환합니다. (0) | 2020.11.19 |
오류 : 각도 입력의 [ng : areq] (0) | 2020.11.19 |