我想做什么 - 将我的纯Python代码转换为Cython。
纯Python代码:
ToolTip
到目前为止,我的Cython代码:
def conflicts(list1,list2):
numIt = 10
for i in list1:
for j in list2:
if i == j and i < numIt:
return True
return False
conflicts([1,2,3], [6,9,8])
由于我是Cython的新手(而不是Python中的专业人士),我想得到一些有关我的转换的反馈。我做对了吗?为了使功能更快,还有什么我应该做的吗?
更新
有谁知道我如何在输入的函数标题中添加类型(list1,list2)?我尝试了“int [:]”编译没有错误,但当我尝试用两个列表调用函数时,我收到消息“TypeError:'list'没有缓冲区接口”。
答案 0 :(得分:0)
正如我评论的那样,你应该能够通过改变你的算法获得相当大的改进,而根本不会搞乱cython。您当前的代码为O(len(list1)*len(list2))
,但您可以使用O(len(list1)+len(list2))
将此代码缩减为set
。您还可以使用内置any
函数简化代码:
def conflicts(list1,list2):
numIt = 10
s1 = set(list1)
return any(x in s1 and x < numIt for x in list2)
根据每个列表中您希望小于10的数量,您可以尝试稍微移动x < numIt
测试以查看最快的数据(过滤list1
然后再将其转换为例如,set
或将if x < numIt
放在for
内any
内的生成器表达式中。{/ p>