2017-02-01 1 views
0

각 목록에 단어 목록이 들어있는 목록 목록이 있습니다. 각 목록은 다른 모든 목록과 길이가 같을 필요는 없습니다. 기본적으로 :목록 보존 목록에서 하위 목록 확인하기

wordlist = [ ['cat', 'sheep', 'dog', 'pig', 'tomato'], ['apple', 'orange', 'sheep', 'dog' 'tomato'], ['cat', 'apple', 'sheep', 'tomato', 'dog'], ['garlic', 'tomato', 'dog' ] 
나는 또한 위의 예를 들어, 모든 목록을 통해 찾을 수 있습니다 일반적인 단어의 목록을 작성했습니다

, 그것은 다음과 같습니다

common = ['sheep','dog', 'tomato'] 

내가 지금, 그것을 확인하고 싶은 하나의 목록에 대해 공통 단어가 어떤 순서로 나타나면 다른 목록이 그 단어를 동일한 순서로 표시합니다. 예를 들어, 목록 1 일반적인 단어 순서 [ '양', '개']에 표시하고, 같은 순서리스트 2에 나타납니다, 그래서 반환해야합니다 : 목록 3 [ '토마토'에서

list1: list2 

' dog ']가 순서대로 나타나며 list4에서도 마찬가지이므로이 두 문자가 매핑됩니다. 다음과 같은 총 출력을 만들기 : 등등리스트 2, list5, list7과 : 목록 1은 다른 목록과 순서 일반적인 하위 목록이있는 경우

list1: list2 
list2: list1 
list3: list4 
list4: list3 

, 그것은 목록 1로 인쇄 할 것입니다. 모든 하위 목록에서 작동해야합니다.

이 방법이 있습니까?

+0

가능한 복제 [? 루프하지 않고 다른 목록에 포함 된 목록을 확인하는 방법] (http://stackoverflow.com/questions/2582911/how-to-check-a-list-contained -by-another-list-without-a-loop) – WhatsThePoint

+1

"공통"에 목록에 나타나는 단어가 포함되어 있습니까? ? 그렇다면 '양'은 왜 그곳에 있습니까? (그것은 마지막 목록에 없습니다) –

답변

0

해결 방법은 목록에서 기대하는 값에 따라 다릅니다.

def contained(candidate, container): 
    temp = container[:] 
    try: 
     for v in candidate: 
      temp.remove(v) 
     return True 
    except ValueError: 
     return False 

시험이 기능 :

이 값의 반복의 possiblity가가, 그리고 당신이 테스트 컨테이너에 충분한 값이 있는지 확인해야하는 경우가 여기에 시간 비효율적 인 솔루션입니다 로 :

>>> a = [1,1,2,3] 
>>> b = [1,2,3,4,5] 
>>> contained(a,b) 
False  
>>> a = [1,2,3] 
>>> contained(a,b) 
True 
>>> a = [1,1,2,4,4] 
>>> b = [1,1,2,2,2,3,4,4,5] 
>>> contained(a,b) 
True 
+0

반복되지 않을 것입니다. 나는 단지 공통 단어와 그들이 매핑 목록에 나타나는 순서를 다른 순서와 동일한 순서로 나타나는 다른 목록으로 찾고 있습니다. – FlameDra

+0

이 대답을 복사 한 링크를 제공하십시오. http://stackoverflow.com/questions/2582911/how-to-check-a-list-contained-by-another-list-without-a-loop – Dmitry

+0

AttributeError : 'str'객체에 'remove'속성이 없습니다. – FlameDra