我有两个列表:
list1 = [(key1,val_key1), (key2,val_key2)]
list2 = [(key1,val_val1), (key2,val_val2)]
这是我的代码:
for lst1 in list1:
for lst2 in list2:
if lst1[0] == lst2[0]:
list_allpairs.append((lst1[1],lst2[1]))
这是结果:
list_allpairs = [(val_key1,val_val1), (val_key2,val_val2)]
是否可以使算法更快?我认为,如果我在第二个循环(list2)中使用pop
方法,则它应该可以更快地工作。
答案 0 :(得分:2)
此算法以O(n)
运行时复杂度运行。这比以O(n^2)
运行时复杂度运行的算法要快。我使用字典来存储键和值,然后比较另一个中是否存在一个键,然后生成结果。
list1 =[('key1','val_key1'), ('key2','val_key2')]
list2 = [('key1','val_val1'), ('key2','val_val2')]
dict2 = {element1:element2 for element1,element2 in list2}
result = []
for key,value in list1:
if key in dict2:
result.append((value,dict2[key]))
print(result)
输出
[('val_key1', 'val_val1'), ('val_key2', 'val_val2')]
答案 1 :(得分:0)
如Albin paul所述,您的算法的阶数为O(n2)。您需要找到一种仅迭代一次的方法。
如果您的键相同,列表的长度相同,并且两个列表都已排序,则可以执行以下操作:
pairs = [list(zip(list1[i], list2[i]))[1] for i in range(len(list1))]
否则,您应该去听一听,因为先前的答案已经提出。