python - 有效地计算一个列表中的元素数量少于其他列表中的元素
问题描述
这是我的测试,但时间已经过去了,我很想知道答案
我有两个清单
first_list = [2, 10, 5, 4, 8]
second_list = [3, 1, 7, 8]
我想计算first_list
小于second_list
like中每个元素的元素数量
2 < 3 ans 1
_ < 1 ans 0
2, 5, 4 < 7 ans 3
2,5,4,8 < 8 ans 4
最后返回列表[1,0,3,4]
count = []
sorted_list = sorted(first_list)
for i in second_list:
c = 0
for j in sorted_list:
if j <= i:
c += 1
else:
break
count.append(c)
这是我最优化的方法,但得到了code stopped due to runtime error
.
解决方案
您可以大大提高大型列表的执行速度。首先对您搜索的列表进行排序:
a = [2, 4, 5, 8, 10]
b = [3, 1, 7, 8]
现在,对于 的每个元素b
,对 进行二分搜索a
,返回该值适合的索引a
。该索引告诉您有多少元素a
小于该值。
对列表进行排序是O(n log n);搜索是O(log n)。您之前的搜索是O(n)(即较慢)。
如果您想进一步改进这一点,也可以对您的b
列表进行排序(但请记住原始顺序,以便您知道答案的归属)。从列表中间开始b
;找到那个元素。a
现在在该点拆分列表;进一步的搜索将只落入一个分区或另一个分区。还要拆分b
列表,这样您就知道要使用哪个部分a
。对每个新分区继续该过程。
推荐阅读
- json - 向strapi自定义api发送参数
- python - 使用 chromedriver 下载生成的 PDF
- ruby-on-rails - 使用 RSpec 测试受 Rails 中“config”下定义的常量影响的行为
- flutter - 如何根据用户选择更改底部导航栏图标的颜色
- r - R - 创建一个函数 f(x) 作为由 n 索引的和
- python - Python Asyncio 内存泄漏还是?
- php - 为什么代码不能在其他 php 文件中运行函数?
- c - 使用 [] 表示法设置/获取元素会导致警告
- jquery - 将 jQuery 数据从 View 传递到 Controller 并将其保存为多对多
- sql - Oracle 子字符串