我想知道如何有效地检查一个值是否在给定的元组列表中。说我有一个清单:
("the", 1)
("check", 1)
("brown, 2)
("gary", 5)
如何检查给定单词是否在列表中,忽略元组的第二个值?如果只是一个词我可以使用
if "the" in wordlist:
#...
但这不起作用,我能做什么就行了?
if ("the", _) in wordlist:
#...
答案 0 :(得分:8)
可以使用哈希
>>> word in dict(list_of_tuples)
答案 1 :(得分:4)
使用any:
if any(word[0] == 'the' for word in wordlist):
# do something
答案 2 :(得分:1)
for tupl in wordlist:
if 'the' in tupl:
# ...
答案 3 :(得分:1)
列表中单词的查找将是O(n)时间复杂度,因此列表中的单词越多,查找速度越慢。为了加快速度,您可以按字母顺序对列表进行排序,然后使用二进制搜索 - 搜索单词变为log(N)复杂度,但最有效的方法是使用散列与集合结构:
'the' in set((word for word, _ in a))
O(1),与集合中的单词数无关。顺便说一句,它保证了单词中只有一个实例在结构中,而list可以保存尽可能多的“the”。 Set应该构造一次,用.add方法添加单词(添加新单词也是O(1)复杂度)
答案 4 :(得分:0)
words,scores = zip(*wordlist)
将单词列表拆分为单词列表和分数列表,然后
print "the" in words