python sorting sort() and sorted()

高洛峰
Release: 2017-02-13 17:29:58
Original
1594 people have browsed it

Application examples:

1. Output a sequence according to the alphabet

2. Sort multiple fields of records, etc.

Commonly used sorting functions:

sort()

sorted()

Comparison:

1.sorted() has a wider application range

sorted(iterable[, cmp[ , key[, reverse]]])

s.sorted([cmp[, key[, reverse]]])

Example:

>>> ; persons = [{'name':'Jon','age': 32}, {'name':'Alan','age': 50}, {'name': 'Bob', 'age':23 }]
>>> sorted(persons, key=lambda x: (x['name'], -x['age']))
[{'age': 50, 'name ': 'Alan'}, {'age': 23, 'name': 'Bob'}, {'age': 32, 'name': 'Jon'}]

sorted() can be used Any iterable object, sort() generally works on lists

>>> a = (1,2,4,2,3)
>>> a.sort( )
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'tuple' object has no attribute 'sort'
> ;>> sorted(a)
[1, 2, 2, 3, 4]

2.sorted() returns the sorted list, and the original list remains unchanged , sort() directly modifies the original list.

sort() does not need to copy the original list, consumes less memory and is highly efficient

>>> a=['1',1,'a',3, 7,'n']
>>> sorted(a)
[1, 3, 7, '1', 'a', 'n']
>>> a
['1', 1, 'a', 3, 7, 'n']
>>> a.sort()
>>> a
[1 , 3, 7, '1', 'a', 'n']

3. For the sort() and sorted() functions, passing in the parameter key is more efficient than the parameter cmp . The function passed in by cmp is called multiple times during the entire sorting process, which is expensive; key is only processed once for each element.

>>> from timeit import Timer
>>> Timer(stmt="sorted(xs,key=lambda x:x[1])",setup="xs =range(100);xs=zip(xs,xs);").timeit(10000)
0.35391712188720703
>>> : cmp(a[1],b[1]))",setup="xs=range(100);xs=zip(xs,xs);").timeit(10000)
0.4931659698486328

4.sorted() can sort a variety of data structures

Dictionary:

Sort phonebook phone numbers by numerical size

> ;>> phonebook = {'Linda':'7750','Bob':'9345','Carol':'5834'}
>>> from operator import itemgetter
> >> sorted_pb = sorted(phonebook.iteritems(),key=itemgetter(1))
>>> sorted_pb
[('Carol', '5834'), ('Linda', '7750'), ('Bob', '9345')]

Multidimensional list:

Multi-field sorting of grades and grades

>>> from operator import itemgetter
>>> gameresult = [['Bob',95.00,'A'],['Alan',86.0,'C'],['Mandy',82.5,'A'] ,['Rob',86,'E']]
>>> sorted(gameresult, key=itemgetter(2, 1))
[['Mandy', 82.5, 'A'] , ['Bob', 95.0, 'A'], ['Alan', 86.0, 'C'], ['Rob', 86, 'E']]

Mixed list in dictionary:

>>> mydict = {'Li':['M',7],
... 'Zhang': ['E',2],
... ' Wang':['p',3],
... 'Du':['C',2]}
>>> from operator import itemgetter
>>> ; sorted(mydict.iteritems(),key=lambda(k,v):operator.itemgetter(1)(v))
[('Zhang', ['E', 2]), ('Du' , ['C', 2]), ('Wang', ['p', 3]), ('Li', ['M', 7])]

Mixed dictionary in List:

Sort multiple key values ​​rating and name

>>> gameresult = [{"name":"Bob","wins":10, "losses":3,"rating":75.00},
... {"name":"David","wins":3,"loses":5,"rating":57.00}]
>>> from operator import itemgetter
>>> sorted(gameresult,key=itemgetter("rating","name"))
[{'wins': 3, 'rating' : 57.0, 'name': 'David', 'loses': 5}, {'wins': 10, 'losses': 3, 'name': 'Bob', 'rating': 75.0}]
> ;>>

For more python sorting sort() and sorted() related articles, please pay attention to the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template