python stord()函数有什么参数?
-
21-09-2019 - |
题
除了有其他论点 key
, , 例如: value
?
解决方案
参数 sort
和 sorted
两个都 sort
和 sorted
有三个关键字参数: cmp
, key
和 reverse
.
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
使用 key
和 reverse
优先,因为它们工作 快多了 比等效 cmp
.
key
应该是一个函数,该函数占用项目并返回一个值进行比较和排序的函数。 reverse
允许反向排序顺序。
使用 key
争论
您可以使用 operator.itemgetter
作为元组中的第三个项目排序的关键参数。
例子
>>> from operator import itemgetter
>>> a = range(5)
>>> b = a[::-1]
>>> c = map(lambda x: chr(((x+3)%5)+97), a)
>>> sequence = zip(a,b,c)
# sort by first item in a tuple
>>> sorted(sequence, key = itemgetter(0))
[(0, 4, 'd'), (1, 3, 'e'), (2, 2, 'a'), (3, 1, 'b'), (4, 0, 'c')]
# sort by second item in a tuple
>>> sorted(sequence, key = itemgetter(1))
[(4, 0, 'c'), (3, 1, 'b'), (2, 2, 'a'), (1, 3, 'e'), (0, 4, 'd')]
# sort by third item in a tuple
>>> sorted(sequence, key = itemgetter(2))
[(2, 2, 'a'), (3, 1, 'b'), (4, 0, 'c'), (0, 4, 'd'), (1, 3, 'e')]
解释
序列可以包含任何对象,甚至都不可比,但是如果我们可以定义一个函数,该函数可以为每个项目进行比较,我们可以在 key
争论 sort
或者 sorted
.
itemgetter
, 特别是,创建了从其操作数中获取给定项目的函数。其文档中的一个示例:
后,
f=itemgetter(2)
, ,电话f(r)
返回r[2]
.
迷你基准, key
vs cmp
只是出于好奇, key
和 cmp
性能比较,较小更好:
>>> from timeit import Timer
>>> Timer(stmt="sorted(xs,key=itemgetter(1))",setup="from operator import itemgetter;xs=range(100);xs=zip(xs,xs);").timeit(300000)
6.7079150676727295
>>> Timer(stmt="sorted(xs,key=lambda x:x[1])",setup="xs=range(100);xs=zip(xs,xs);").timeit(300000)
11.609490871429443
>>> Timer(stmt="sorted(xs,cmp=lambda a,b: cmp(a[1],b[1]))",setup="xs=range(100);xs=zip(xs,xs);").timeit(300000)
22.335839986801147
所以,与 key
似乎至少是分类的两倍 cmp
. 。使用 itemgetter
代替 lambda x: x[1]
使排序更快。
其他提示
除了 key=
, , 这 sort
Python 2.x中的列表方法可以选择 cmp=
争论 (不是 一个好主意,已在Python 3中删除。在这两个中的任何一个或没有的情况下,您总是可以通过 reverse=True
要使排序向下移动(而不是按默认值向上,您也可以明确要求 reverse=False
如果您真的很想出于某种原因这样做)。我不知道那是什么 value
您要提到的论点应该做。
是的,它需要其他论点,但没有 value
.
>>> print list.sort.__doc__
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
什么会 value
争论甚至意味着?
不隶属于 StackOverflow