对列表b进行从小到大的排序 python_python中列表排序和键排序

列表排序

最基本的排序函数有sort(),和sorted()函数两种。sort是列表的内置函数,而sorted可以作用于所有的可迭代对象。

a = [3,5,7,4,2,8,0]

b = [3,5,7,4,2,8,0]

print(a)

a.sort()

print(a)

[3, 5, 7, 4, 2, 8, 0]

[0, 2, 3, 4, 5, 7, 8]

print(b)

b_s = sorted(b)

print(b)

print(b_s)

[3, 5, 7, 4, 2, 8, 0]

[3, 5, 7, 4, 2, 8, 0]

[0, 2, 3, 4, 5, 7, 8]

通过上面的例子可以看到,sort改变原来的列表,inplace=True;而sorted产生新的列表。

默认排序升序,可以通过reverse参数设置降序,默认升序为False。

a = [3,5,7,4,2,8,0]

b = (3,5,7,4,2,8,0)

print(a)

a.sort(reverse=True)

print(a)

[3, 5, 7, 4, 2, 8, 0]

[8, 7, 5, 4, 3, 2, 0]

b.sort()

---------------------------------------------------------------------------

AttributeError Traceback (most recent call last)

in ()

----> 1 b.sort()

AttributeError: 'tuple' object has no attribute 'sort'

sorted(b)

[0, 2, 3, 4, 5, 7, 8]

元祖使用sort()函数会报错,可以使用sorted()函数进行排序。

键排序

现实中会使用复杂的数据结构,最简单的比如字典,或者包含多个列,我们现在想按其中的一列进行排序。

上面的简单的列表排序就不能适应,这个时候就要使用键排序了。

#示例1:#用一个元组表示一条记录,记录一个人的姓名,ID,年龄。然后我们使用不同的域(姓名,ID,年龄)来对域进行排序。employee_records = [('joe',1,52),('bech',2,26),('ele',6,32),('neo',3,45)]#使用姓名进行排序print(sorted(employee_records,key = lambda emp:emp[0]))

[('bech', 2, 26), ('ele', 6, 32), ('joe', 1, 52), ('neo', 3, 45)]

#使用ID进行排序print(sorted(employee_records,key = lambda emp:emp[1]))

[('joe', 1, 52), ('bech', 2, 26), ('neo', 3, 45), ('ele', 6, 32)]

#使用年龄进行排序print(sorted(employee_records,key = lambda emp:emp[2]))

[('bech', 2, 26), ('ele', 6, 32), ('neo', 3, 45), ('joe', 1, 52)]

上面使用了lambda函数进行了域的传递,也可以使用python中快捷的函数进行访问键。这里介绍operator模块的itemgetter。

from operator import itemgetter

employee_records = [('joe',1,52),('bech',2,26),('ele',6,32),('neo',3,45)]#使用姓名进行排序print(sorted(employee_records,key = itemgetter(0)))

[('bech', 2, 26), ('ele', 6, 32), ('joe', 1, 52), ('neo', 3, 45)]

#使用ID进行排序print(sorted(employee_records,key = itemgetter(1)))

[('joe', 1, 52), ('bech', 2, 26), ('neo', 3, 45), ('ele', 6, 32)]

#使用年龄进行排序print(sorted(employee_records,key = itemgetter(2)))

[('bech', 2, 26), ('ele', 6, 32), ('neo', 3, 45), ('joe', 1, 52)]

多级排序,比如线用姓名,再用年龄。代码如下:

print(sorted(employee_records,key = itemgetter(0,2)))

[('bech', 2, 26), ('ele', 6, 32), ('joe', 1, 52), ('neo', 3, 45)]

如果迭代对象是类元素,使用operator模块中的,attrgetter和methodcaller函数。这里不做详述。

参考:《python数据科学指南》

你可能感兴趣的:(对列表b进行从小到大的排序,python)