我很惊讶在两种方法中排除一个元组列表的速度有多么不同。所以我想知道为什么。
我有一个(int,float)形式的1,500个元组的列表,按float
值排序。(添加注意:元组列表中的每个 int 值都是不同的。)我想找出排除子列表的最快方法。所以首先我创建了一个要排除的子列表:
exclude_list = [v for i,v in enumerate(tuple_list) if (i % 3) == 0]
然后我确定了两种不同的移除方法exclude_list
(tuple_list
但这不是我最终确定的两种方法):
remainder_list = [v for v in tuple_list if v not in exclude_list]
和,
remainder_set = set(tuple_list) - set(exclude_list)
remainder_list = sorted(remainder_set, key=itemgetter(1)) #edited to chance key to 1 from 0
时间差异很大:第一种方法为 14.7235 秒(500 次),第二种方法为 0.3426(500 次)。我理解为什么这两种方法有如此不同的时间,因为第一种方法需要在 sub_list 中搜索主列表中的每个项目。因此,我想出了一种更好的搜索/排除方法:
exclude_dict = dict(exclude_list)
remainder_list = [v for v in tuple_list if v[0] not in exclude_dict]
我不认为这个版本的排除列表项会比第一个快得多。它不仅比第一种方法快,而且比第二种方法快!它的时间为 0.11177(500 次)。为什么这比我的设置差异/度假方法更快?