可能重复:
关于python的内置sort()方法
名字说明了一切.
我试图向某人解释为什么他们应该使用Python的内置sorted()函数而不是自己滚动,我意识到我不知道它使用什么算法.
如果重要,我们正在谈论python 2.7
我在Python中实现了不同的排序算法以更好地理解它们,我想知道Python的内置排序方法实现什么类型的排序?
如果我必须对某些列表进行排序,比如说,使用sort methodPython中的如下所示.
a=[3,7,1,0,2,8]
a.sort()
print a
Run Code Online (Sandbox Code Playgroud)
worst, average and best cases在排序的情况下,这些程序有哪些?他们每个人都有什么复杂性?python在这里使用什么排序技术?
我想知道按键排序字典和按值排序字典的时间复杂度是多少.
例如:
for key in sorted(my_dict, key = my_dict.get):
<some-code>
Run Code Online (Sandbox Code Playgroud)
在上面这行中,排序的时间复杂度是多少?如果假设使用了快速排序,那么平均是O(NlogN),最坏的情况是O(N*N)吗?
按值排序和按键排序的时间复杂度是不同的?因为,通过其密钥访问值只需要O(1)时间,两者应该相同?
谢谢.
我有一个类(dicts 列表),我希望它自己排序:
class Table(list):
…
def sort (self, in_col_name):
self = Table(sorted(self, key=lambda x: x[in_col_name]))
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.为什么?怎么避免呢?除了在外部进行排序外,例如:
new_table = Table(sorted(old_table, key=lambda x: x['col_name'])
Run Code Online (Sandbox Code Playgroud)
是不是可以操纵对象本身?拥有以下内容更有意义:
class Table(list):
pass
Run Code Online (Sandbox Code Playgroud)
比:
class Table(object):
l = []
…
def sort (self, in_col_name):
self.l = sorted(self.l, key=lambda x: x[in_col_name])
Run Code Online (Sandbox Code Playgroud)
我认为,这是有效的.一般来说,Python中没有任何方法可以改变对象(不仅仅是实例变量)?
x = [1, 4, 7, 65, 23, 57, 12]
>>> sorted(x)
[1, 4, 7, 12, 23, 57, 65]
Run Code Online (Sandbox Code Playgroud)
出于好奇,这个功能如何运作?Python用于排序迭代的算法是什么?
嗨,我正在 leetcode 上解决这个问题 [给定一个非负整数列表,将它们排列成最大的数字。] 我看到了这个解决方案。我无法理解 LargerNumKey 类是如何工作的?另外,lt的目的是什么?什么是变量 x 和 y
class LargerNumKey(str):
def __lt__(x, y):
return x+y > y+x
class Solution:
def largestNumber(self, nums):
largest_num = ''.join(sorted(map(str, nums), key=LargerNumKey))
return '0' if largest_num[0] == '0' else largest_num
Run Code Online (Sandbox Code Playgroud) 假设我在Python中有两个相等长度的无序列表:
a = [5, 2, 3, 1, 4]
b = ['d', 'b', 'a', 'c', 'e']
Run Code Online (Sandbox Code Playgroud)
是否有O(n),就地算法来获得以下结果?
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]
Run Code Online (Sandbox Code Playgroud) 可能重复:
关于python的内置sort()方法
该sort()方法使用哪种排序算法对数字列表进行排序?我怎样才能证明这一点?
seq = list_of_numbers
seq.sort()
Run Code Online (Sandbox Code Playgroud) 为什么我不能检查__builtins__模块的源代码?
>>> import inspect
>>> inspect.getsource(__builtins__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/inspect.py", line 701, in getsource
lines, lnum = getsourcelines(object)
File "/usr/lib/python2.7/inspect.py", line 690, in getsourcelines
lines, lnum = findsource(object)
File "/usr/lib/python2.7/inspect.py", line 526, in findsource
file = getfile(object)
File "/usr/lib/python2.7/inspect.py", line 403, in getfile
raise TypeError('{!r} is a built-in module'.format(object))
TypeError: <module '__builtin__' (built-in)> is a built-in module
Run Code Online (Sandbox Code Playgroud)
我经历了这个 谈话,但没有帮助。
如果我解释得很好,这不应该发生:
>>> help(inspect.getsource)
Help on function getsource in …Run Code Online (Sandbox Code Playgroud)