我有一个列表,其中元素已经排序。我想过滤掉大于给定数字的元素。
例如,
original_list = [2,3,5,7,11]
limit = 6
expected_list = [2,3,5] # All elements <=6
最有效的方法是什么?
我看到的所有现有问题都涉及未排序的列表。我相信如果列表已经排序,将会有一种更有效的过滤方法。
问题来源:stackoverflow
这是2种方法:
from bisect import bisect_right
# using a while loop
def gen(l, m):
i = 0
while i < len(l) and l[i] <= m:
yield l[i]
i += 1
original_list = [2,3,5,7,11]
limit = 6
print(list(gen(original_list, limit)))
# using bisect_right
limit = bisect_right(original_list, limit)
print(original_list[:limit])
输出:
[2, 3, 5]
[2, 3, 5]
由于时间复杂度为O(logN),因此整体bisect的性能要好得多,使用while循环版本会给您带来O(N)的时间复杂度,但是有时,如果您的limit值为,while循环版本会更有效。在列表的最下方
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。