我試圖找到最有效的解決方案,以做到以下幾點:有效地從第二列表(元組)過濾對於一個Python列表值
我有兩個長的名單:
a = [3, 7, 89, 1, ....] #list of user_ids
b = [(2,t1),(3,t2),(2,t3),(89,t4), ....] # list of user_id, epoch_time pairs
目標是檢索列表a
的所有成員(如果它們存在於列表b
中(即列表b
中每個元組的第一個成員)。請注意0可能存在於b
中的多個元組中。
一個能夠滿足像這樣這個要求:
result = []
for user_id in a:
for uid,epoch_time in b:
if user_id == uid:
result.append(user_id)
return result
的問題是,有沒有辦法做到這一點的速度比爲O(n^2)?例如。例如通過重組b
作爲詞典?
user_ids。 b'不是唯一的 - 注意'b'中'(2,'t1')'和'(2,'t3')'是如何出現的。這不會乾淨地翻譯成像這樣的字典,是嗎? –
它會保存最後一個'key'遇到的'key',也就是'2:'t3''但是如果你使用dict只是爲了查看用戶ID是否存在,那就沒問題了 –
如果你想將'b'永久轉換爲字典,您可以爲每個用戶分配一個'epoch_time'的列表並附加到它,例如:'{2:['t1','t2','t3']}' –