2011-04-14 5 views
1

에서 튜플과 목록을 비교 나는 그런이파이썬

bigramslist = [ ("the", "end"), ("end", "of"), ("of", "the"), ("the", "world") ] 

로 두 단어

list = ["the","end"] 

내가 튜플의 목록이 포함 된 목록을 체계적으로 각 튜플을 통과하는 것이 가능 bigramslist를 찾아 목록의 두 단어가 bigramlist에있는 튜플 중 하나와 일치하는지 확인하십시오. 그리고 만약 그렇다면 사실입니까? 완전성에 대한

감사

+0

중복을 찾으십니까? –

+3

일치 (끝, of) 일치 (중, 끝), 또는 튜플이 일치 순서가 같아야합니까? –

+0

예 튜플이 일치하도록 동일한 순서 여야합니다 – Tom

답변

12
>>> L1 = ["the","end"] 
>>> bigramslist = [ ("the","end"), ("end","of"), ("of","the"), ("the","world") ] 
>>> tuple(L1) in bigramslist 
True 

편집 : jsbueno는 지적 목록을 검색하는 것은 O 그대로 어디

>>> bigramsset = set([ ("the","end"), ("end","of"), ("of","the"), ("the","world") ]) 
>>> L1 = ["the","end"] 
>>> tuple(L1) in bigramsset 
True 

이 세트를 사용하는 (A O (1) 검색 시간 복잡도가 발생합니다 엔). 세트를 작성하는 보조 노트는 추가 O (n)이기도합니다. 그 목록은 사실이 포함 된 경우 당신은 무엇을 결정할 수 있습니다 -

>>> list = ["the", "end"] 
>>> bigramslist = [ ("the", "end"), ("end", "of"), ("of", "the"), ("the", "world") ] 
>>> def check(list, biglist): 
...  return [(list[0], list[1]) == big for big in biglist] 
... 
>>> check(list, bigramslist) 
[True, False, False, False] 
>>> 

이 비교 값 중 하나를 일치 :이를 찾고 계신다면

+2

bigramslist의 순서가 중요하지 않은 경우에는 목록 대신 '집합'이어야합니다. 이렇게하면 비교 속도가 훨씬 빨라집니다. 'in '연산자로 containement를 검사하기 전에'bigramslist = set (bigramslist)'를 수행하면됩니다. – jsbueno

+0

@ jsbueno : 사실, 목록을 작성하는 대신 처음부터 세트를 구성 할 수 있지만 그 세트를 작성하는 경우가 많습니다. – delnan

0

확실하지.

편집 : 좋습니다, kriegar의 방법이 훨씬 좋습니다.