如何使算法更快?

时间:2019-04-24 07:14:05

标签: python algorithm

我有两个列表:

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方法,则它应该可以更快地工作。

2 个答案:

答案 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))]

否则,您应该去听一听,因为先前的答案已经提出。