我想知道如何有效地檢查一個值是否在給定的元組列表中。說我有一個列表:檢查單詞是否在元組列表中
("the", 1)
("check", 1)
("brown, 2)
("gary", 5)
我怎麼能檢查一個給定的單詞是否是列表中,忽略元組的第二個值?如果它只是一個字,我可以使用
if "the" in wordlist:
#...
,但是這是不行的,有沿線這個我可以做什麼?
if ("the", _) in wordlist:
#...
我想知道如何有效地檢查一個值是否在給定的元組列表中。說我有一個列表:檢查單詞是否在元組列表中
("the", 1)
("check", 1)
("brown, 2)
("gary", 5)
我怎麼能檢查一個給定的單詞是否是列表中,忽略元組的第二個值?如果它只是一個字,我可以使用
if "the" in wordlist:
#...
,但是這是不行的,有沿線這個我可以做什麼?
if ("the", _) in wordlist:
#...
可能使用散列
>>> word in dict(list_of_tuples)
非常實用的解決方案。完善。 – simopopov 2014-12-01 23:20:17
這是一個很好的建議,甚至比我的zip更容易:P – 2014-12-01 23:20:20
如果我也需要訪問該位置,是否有類似這樣的簡單解決方案? – 2014-12-01 23:24:05
for tupl in wordlist:
if 'the' in tupl:
# ...
使用any:
if any(word[0] == 'the' for word in wordlist):
# do something
words,scores = zip(*wordlist)
拆分單詞表到單詞的列表,然後評分列表只是
print "the" in words
簡短回覆是完全可以接受的,但是將代碼塊中的敘述從代碼塊中分離出來並通過解釋方式提供一兩句話可以創造出高質量的回覆。 – Jeeped 2014-12-02 00:09:43
查找列表中的單詞將是O(n)時間複雜度,因此列表中的單詞越多,查找速度越慢。爲了加快速度,您可以按字母排序列表,然後使用二進制搜索 - 單詞搜索變爲log(N)複雜度,但最有效的方法是使用集合結構的散列:
'the' in set((word for word, _ in a))
O(1),與集合中有多少單詞無關。順便說一句,它保證了這個單詞只有一個實例在結構中,而列表可以保存許多你所追加的「the」。 Set應該被構造一次,用.add方法添加單詞(添加新單詞也是O(1)的複雜性)
但是排序是N * log(N) – wim 2014-12-01 23:46:06
@wim,當然! topicstarter詢問了查詢,我回答了查找時間。如果沒有關於數據使用的更多知識,通常在效率的情況下進行交談是不可能的,例如,多長時間一次單詞添加到查詢中的頻率。 – 2014-12-01 23:52:47
什麼是更高效的將取決於你是否必須只做一次或多次使用同一個worldlist – wim 2014-12-01 23:19:35