developer tip

다음 항목이 모두 목록에 있는지 확인하는 방법은 무엇입니까?

optionbox 2020. 8. 25. 07:55
반응형

다음 항목이 모두 목록에 있는지 확인하는 방법은 무엇입니까?


목록에 하나 이상의 항목이 있는지 찾는 방법에 대한 관련 질문이 있음을 발견 했습니다. 다음 항목 중 하나가 목록
에 있는지 확인하는 방법은 무엇입니까?

그러나 모든 항목이 목록에 있는지 여부를 찾는 가장 좋고 비단뱀적인 방법은 무엇입니까?

문서를 검색하여이 솔루션을 찾았습니다.

>>> 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다음과 같은 방식으로 사용할 것입니다 .

set(l).issuperset(set(['a','b'])) 

또는 그 반대의 경우 :

set(['a','b']).issubset(set(l)) 

좀 더 읽기 쉽지만 과도 할 수 있습니다. 집합은 컬렉션 간의 합집합 / 교차 / 차이를 계산하는 데 특히 유용하지만이 상황에서는 최선의 선택이 아닐 수 있습니다.


나는이 두 가지가 가장 논리적으로 보이기 때문에 좋아합니다. 후자는 더 짧고 아마도 가장 빠를 것입니다 (여기서는 Python 2.7 set백 포트 된 리터럴 구문을 사용하여 표시됨 ).

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) 

So, the following line returns False.

is_subseq(v2, v1)

This was what I was searching online but unfortunately found not online but while experimenting on python interpreter.

>>> case  = "caseCamel"
>>> label = "Case Camel"
>>> list  = ["apple", "banana"]
>>>
>>> (case or label) in list
False
>>> list = ["apple", "caseCamel"]
>>> (case or label) in list
True
>>> (case and label) in list
False
>>> list = ["case", "caseCamel", "Case Camel"]
>>> (case and label) in list
True
>>>

and if you have a looong list of variables held in a sublist variable

>>>
>>> list  = ["case", "caseCamel", "Case Camel"]
>>> label = "Case Camel"
>>> case  = "caseCamel"
>>>
>>> sublist = ["unique banana", "very unique banana"]
>>>
>>> # example for if any (at least one) item contained in superset (or statement)
...
>>> next((True for item in sublist if next((True for x in list if x == item), False)), False)
False
>>>
>>> sublist[0] = label
>>>
>>> next((True for item in sublist if next((True for x in list if x == item), False)), False)
True
>>>
>>> # example for whether a subset (all items) contained in superset (and statement)
...
>>> # a bit of demorgan's law
...
>>> next((False for item in sublist if item not in list), True)
False
>>>
>>> sublist[1] = case
>>>
>>> next((False for item in sublist if item not in list), True)
True
>>>
>>> next((True for item in sublist if next((True for x in list if x == item), False)), False)
True
>>>
>>>

An example of how to do this using a lambda expression would be:

issublist = lambda x, y: 0 in [_ in x for _ in y]

참고URL : https://stackoverflow.com/questions/3931541/how-to-check-if-all-of-the-following-items-are-in-a-list

반응형