아래 항목이 모두 목록에 있는지 확인하는 방법은 무엇입니까?
목록에 항목이 하나 이상 있는지 확인하는 방법에 대한 관련 질문이 있습니다.
다음 항목 중 하나가 목록에 있는지 확인하는 방법은 무엇입니까?
하지만 목록에 모든 항목이 존재하는지 여부를 알아내는 가장 좋고 피조어적인 방법은 무엇일까요?
문서를 검색한 결과 다음과 같은 해결 방법을 발견했습니다.
>>> l = ['a', 'b', 'c']
>>> set(['a', 'b']) <= set(l)
True
>>> set(['a', 'x']) <= set(l)
False
다른 솔루션은 다음과 같습니다.
>>> l = ['a', 'b', 'c']
>>> all(x in l for x in ['a', 'b'])
True
>>> all(x in l for x in ['a', 'x'])
False
하지만 여기서는 더 많은 타이핑을 해야 합니다.
다른 해결책이 있나요?
오퍼레이터는 다음과 같습니다.<=
Python에서는 일반적으로 "작거나 같음"과 크게 다른 것을 의미하도록 재정의되지 않습니다.표준 라이브러리가 이렇게 하는 것은 흔치 않습니다. 레거시 API처럼 느껴집니다.
더 명확하게 명명된 동일한 방법을 사용합니다.set.issubset
. 인수를 세트로 변환할 필요는 없습니다.필요에 따라 변환됩니다.
set(['a', 'b']).issubset(['a', 'b', 'c'])
다음과 같은 방법으로 사용할 수 있습니다.
set(l).issuperset(set(['a','b']))
또는 그 반대:
set(['a','b']).issubset(set(l))
좀 더 읽기 쉽긴 하지만 과잉 살상일 수도 있어요집합은 집합/교차/수집 간의 차이를 계산하는 데 특히 유용하지만 이 상황에서는 최상의 옵션이 아닐 수 있습니다.
이 두 가지가 가장 논리적인 것 같기 때문에 마음에 듭니다.후자는 짧고 빠를 수 있습니다(여기에서는 를 사용하고 있습니다).set
Python 2.7로 역리포트된 리터럴 구문:
all(x in {'a', 'b', 'c'} for x in ['a', 'b'])
# or
{'a', 'b'}.issubset({'a', 'b', 'c'})
목록에 다음과 같은 중복 항목이 포함되어 있으면 어떻게 됩니까?
v1 = ['s', 'h', 'e', 'e', 'p']
v2 = ['s', 's', 'h']
세트에 중복이 포함되어 있지 않습니다.따라서 다음 행은 True를 반환합니다.
set(v2).issubset(v1)
중복 수를 계산하려면 다음 코드를 사용할 수 있습니다.
v1 = sorted(v1)
v2 = sorted(v2)
def is_subseq(v2, v1):
"""Check whether v2 is a subsequence of v1."""
it = iter(v1)
return all(c in it for c in v2)
따라서 다음 행은 False를 반환합니다.
is_subseq(v2, v1)
OP의 경우는 아니지만, 딕트로 교차로를 주장하고 싶었지만, 검색(예: 나)이 서툴러서 이곳에 오게 된 사람에게는, 함께 작업할 필요가 있습니다.dict.items
:
>>> a = {'key': 'value'}
>>> b = {'key': 'value', 'extra_key': 'extra_value'}
>>> all(item in a.items() for item in b.items())
True
>>> all(item in b.items() for item in a.items())
False
그 이유는dict.items
키/값 쌍의 튜플을 반환하며 Python의 다른 개체와 마찬가지로 서로 호환됩니다.
또 다른 솔루션은 다음과 같습니다.
l = ['a', 'b', 'c']
potential_subset1 = ['a', 'b']
potential_subset2 = ['a', 'x']
print(False not in [i in l for i in potential_subset1]) # True
print(False not in [i in l for i in potential_subset2]) # False
이 솔루션이 훌륭한 이유는 목록을 인라인에 배치하여 한 줄씩 쓸 수 있다는 것입니다.
람다 식을 사용하여 이를 수행하는 방법의 예는 다음과 같습니다.
issublist = lambda x, y: 0 in [_ in x for _ in y]
짧은 구문
Python 인터프리터로 실험하던 중 매우 읽기 쉬운 구문을 발견했습니다.
>>> my_list = [1, 2, 3, 4, 5]
>>> (6 or 7) in my_list
False
>>> (2 or 6) in my_list
True
>>> (2 and 6) in my_list
False
>>> (2 and 5) in my_list
True
검색할 항목 목록
긴 「」에.sub_list
★★★★
>>> my_list = [1, 2, 3, 4, 5]
>>> sub_list = ['x', 'y']
이상의)되어 있는 (「」는 「」는 「」).or
★★★★★★★★)
>>> next((True for item in sub_list if next((True for x in my_list if x == item), False)), False)
False
>>> sub_list[0] = 3
>>> next((True for item in sub_list if next((True for x in my_list if x == item), False)), False)
True
되어 있는 ( 「」 「」 「」 「」).and
statement)으로 "secondition"을 합니다.sub_list
는 풀 서브셋입니다.또한 De Morgan의 법칙도 일부 포함되어 있습니다.
>>> next((False for item in sub_list if item not in my_list), True)
False
>>> sub_list[1] = 2
>>> next((False for item in sub_list if item not in my_list), True)
True
>>> next((True for item in sub_list if next((True for x in my_list if x == item), False)), False)
True
언급URL : https://stackoverflow.com/questions/3931541/how-to-check-if-all-of-the-following-items-are-in-a-list
'source' 카테고리의 다른 글
파일에서 Bash 배열로 줄 읽기 (0) | 2023.04.19 |
---|---|
Objective-C의 NSMutableArray에서 중복된 값을 제거하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.19 |
C#: Excel Package를 사용한 행/열 수 가져오기 (0) | 2023.04.14 |
사용자 정의 비교 기능을 사용하여 목록 정렬 (0) | 2023.04.14 |
String에서 모든 공백을 제거하는 효율적인 방법 (0) | 2023.04.14 |