我很难理解python中的成本时间。 特别是在一个例子中,快速排序程序。以下是几个网站认为是python中quicksort的最佳实现:
def theirquicksort(list):
"""Quicksort using list comprehensions"""
if list == []:
return []
else:
pivot = list[0]
lesser = theirquicksort([x for x in list[1:] if x < pivot])
greater = theirquicksort([x for x in list[1:] if x >= pivot])
return lesser + [pivot] + greater
以下是我期望成为quicksort的最佳实现(以及作为学校良好实施的内容):
def myquicksort(list):
"""Quicksort not using list comprehensions"""
if list == []:
return []
else:
pivot = list[0]
lesser,greater=[],[]
for i in list[1:]:
if i < pivot:
lesser.append(i)
else:
greater.append(i)
return myquicksort(lesser) + [pivot] + myquicksort(greater)
在他们的快捷方式中,当调用迭代列表时,python(我猜?)通过列表运行两次,是否采用较小/较大的元素。 在myquicksort中,python只在列表中运行一次,因此没有任何用处。我的意思是它不会比较我的两倍。 因此,它应该以纯粹的数学方式更快。 而且,事实并非如此。为什么?
关于优化的另一个问题,即使它更重要: 当我想用其他东西添加/乘法/任何东西时,&#34;其他东西&#34;根据条件,通常的方法是:
if condition:
a+=3
else:
a+=1
例如。 但是,如果我使用该怎么办:
a+={True:3,False:1}[condition]
我会失去很多时间吗?我是否会浪费时间?乍一看使用第一种可能性是没有问题的,但在计算的中间可以放在一行除了这个,其中加1/3 - 当然只有一个例子 - 不是第一种,也不是最后的操作,第二种可能性是有吸引力的。但这意味着要打电话给dictionnary类。那么,它有多聪明?
答案 0 :(得分:0)
最好每个问题提出一个问题。第一部分由Python quicksort - List comprehension vs Recursion (partition routine)
回答然后,您问题的第二部分可以表示为
a += 3 if condition else 1
但是我发现很难阅读并且更喜欢你所展示的if / then。二进制测试的字典对于测试来说有点过分。