сравнение списков с кортежами в python - PullRequest
1 голос
/ 14 апреля 2011

У меня есть список, содержащий два слова

list =  ["the","end"]

У меня есть список таких кортежей, как этот

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

Можно ли систематически просматривать каждый кортеж в списке биграмм ипосмотрите, совпадают ли оба слова в списке с любым из кортежей в биграмлисте.И если так, верните истину?

спасибо

Ответы [ 2 ]

12 голосов
/ 14 апреля 2011
>>> L1 = ["the","end"]
>>> bigramslist = [ ("the","end"), ("end","of"), ("of","the"), ("the","world") ]
>>> tuple(L1) in bigramslist
True

редактировать для полноты:

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

, как указал jsbueno, использование набора приведет к сложности времени поиска O (1), где при поиске в списке O (n). В качестве примечания при создании набора также используется дополнительная O (n).

0 голосов
/ 14 апреля 2011

Не уверен, что вы ищете:

>>> 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]
>>> 

Соответствует любому из сравниваемых значений - вы можете затем решить, что делать, если этот список содержит true.

Редактировать: Хорошо, метод Кригара намного лучше.

...