[英]iterating quickly through list of tuples
我想知道是否有更快,更省時的方法來迭代元組列表,找到正確的匹配。 我所做的是:
# this is a very long list.
my_list = [ (old1, new1), (old2, new2), (old3, new3), ... (oldN, newN)]
# go through entire list and look for match
for j in my_list:
if j[0] == VALUE:
PAIR_FOUND = True
MATCHING_VALUE = j[1]
break
此代碼可能需要相當長的時間才能執行,具體取決於列表中的項目數。 我相信有更好的方法可以做到這一點。
我認為你可以使用
for j,k in my_list:
[ ... stuff ... ]
假設更多的內存使用不是問題,如果你的元組的第一項是可清除的,你可以從元組列表中創建一個字典 ,然后查找值就像從dict
查找鍵一樣簡單。 就像是:
dct = dict(tuples)
val = dct.get(key) # None if item not found else the corresponding value
編輯 :要創建反向映射,請使用以下內容:
revDct = dict((val, key) for (key, val) in tuples)
這個問題已經死了但仍然知道另一種方式並沒有傷害:
my_list = [ (old1, new1), (old2, new2), (old3, new3), ... (oldN, newN)]
for first,*args in my_list:
if first == Value:
PAIR_FOUND = True
MATCHING_VALUE = args
break
可以清除代碼,但如果使用列表來存儲元組,則任何此類查找都將為O(N)。
如果查找速度很重要,您應該使用dict
來存儲元組。 鍵應該是元組的第0個元素,因為那是你正在搜索的內容。 您可以從列表中輕松創建一個字典:
my_dict = dict(my_list)
然后, (VALUE, my_dict[VALUE])
將為您提供匹配的元組(假設存在VALUE
)。
我想知道下面的方法是否是你想要的。
您可以使用defaultdict
。
>>> from collections import defaultdict
>>> s = [('red',1), ('blue',2), ('red',3), ('blue',4), ('red',1), ('blue',4)]
>>> d = defaultdict(list)
>>> for k, v in s:
d[k].append(v)
>>> sorted(d.items())
[('blue', [2, 4, 4]), ('red', [1, 3, 1])]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.