Python 有效地计算一个列表中少于其他列表中元素的元素数
这是我的测试,但时间已经过去了,我很想知道答案 我有两张单子Python 有效地计算一个列表中少于其他列表中元素的元素数,python,Python,这是我的测试,但时间已经过去了,我很想知道答案 我有两张单子 first_list = [2, 10, 5, 4, 8] second_list = [3, 1, 7, 8] 我想计算first\u列表中的元素数,这些元素比second\u列表 像 这是我最优化的方法,但由于运行时错误而停止了代码您可以大大提高大型列表的执行速度。首先对搜索的列表进行排序: a = [2, 4, 5, 8, 10] b = [3, 1, 7, 8] 现在,对于b的每个元素,在a上进行二进制搜索,返回该值适合a
first_list = [2, 10, 5, 4, 8]
second_list = [3, 1, 7, 8]
我想计算first\u列表
中的元素数,这些元素比second\u列表
像
这是我最优化的方法,但由于运行时错误而停止了
代码
您可以大大提高大型列表的执行速度。首先对搜索的列表进行排序:
a = [2, 4, 5, 8, 10]
b = [3, 1, 7, 8]
现在,对于b
的每个元素,在a
上进行二进制搜索,返回该值适合a
的索引。该索引告诉您a
中有多少元素小于该值
列表排序为O(n log n);搜索是O(logn)。您以前的搜索是O(n)(即速度较慢)
如果您想在这方面做更多的改进,还可以对
b
列表进行排序(但记住原始顺序,这样您就知道答案属于哪里)。在“代码> B < /代码>列表中间开始;找到那个元素。现在在该点拆分a
列表;进一步的搜索将只进入一个分区或另一个分区。同时拆分b
列表,以便知道使用a
的哪一部分。对每个新分区继续该过程。标准包含模块可用于此目的(进行二进制搜索)
印刷品:
3 [2]
1 []
7 [2, 4, 5]
8 [2, 4, 5, 8]
编辑:如果您只需要计数而不是项目,则可以修改b搜索
以返回i
,而不是arr[:i]
def bsearch(arr, key):
'Find rightmost value less than or equal to x'
i = bisect.bisect_right(arr, key)
if i:
return i
else:
return 0
您遇到了什么运行时错误?什么测试用例?啊。。。您的错误是您超过了特定测试用例允许的执行时间吗?测试用例要大得多吗?测试用例是隐藏的,只有错误代码由于运行时错误而停止。我对这个问题的几个部分感到困惑。您的代码使用了
first_list
和second_list
,但您也参考了a
和b
?我不知道ans的意思是什么。实际上,第二个代码块中的任何内容对我来说都没有任何意义。我相信他只是在寻找更高效的代码版本。
3 [2]
1 []
7 [2, 4, 5]
8 [2, 4, 5, 8]
def bsearch(arr, key):
'Find rightmost value less than or equal to x'
i = bisect.bisect_right(arr, key)
if i:
return i
else:
return 0