我创建了一个函数,用于查找列表中的项是否通用,如果是,则修改这些列表中的特定元素(列表是嵌套的)。问题是列表中的查找是O(n)。如果我有大量的列表,我会花太多时间在查找上。这是使用列表的函数:
def union_finder(list_of_lists_unions):
while list_of_lists_unions:
processed_list = list_of_lists_unions.pop(0)
for item in processed_list:
for loc_list,pointer_list in enumerate(list_of_lists_unions):
for location,iteration in enumerate(pointer_list):
if item == iteration:
#if condition then change the element which matches on the lists
if(something):
count +=1
index_dict[item] = count
list_of_lists_unions[loc_list][location] = str(index_dict[item]) + str('@')
该功能完美无缺。例如,如果我把它作为输入:
[[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30],[1,2,3,4,29,30], [100,200,300,28,29,30]]
修改
我正在尝试使用set(),因为查找复杂度为O(1)(正如文档所述)。问题是我正在使用列表,所以我可以修改迭代内的元素。设置不允许我修改其中的特定元素。我的想法是在集合中找到我想要的项目,然后将其转换回列表进行我想要的修改,然后将其重新设置回设置。但这有效吗?有没有其他方法可以使用set的查找速度?列表的查找复杂度是O(N)太多,因为我的列表有些很长,如果我尝试比较2列表len(list1)= m,len(list2)= n,我得到m * n查找(x中的x)。