我试图找到最有效的解决方案,以做到以下几点:有效地从第二列表(元组)过滤对于一个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']}' –