pythonlist排序算法_Python:对list进行排序

对list进行排序

利用list的成员函数sort()排序

利用内置函数(built-in function) sorted()进行排序

两者的区别

sort() 对list本身进行排序,改变list的值。sort()只能对list排序。

sorted() 产生一个新的list,不改变list的值。sorted()可以对iterable对象排序

举例:

l = [12, 34, 21, 45, 12, 7, 2]

l.sort()

print(l)

l2 = [12, 34, 21, 45, 12, 7, 2]

l3 = sorted(l2)

print(l2)

print(l3)

结果为:

[2, 7, 12, 12, 21, 34, 45]

[12, 34, 21, 45, 12, 7, 2]

[2, 7, 12, 12, 21, 34, 45]

sorted()函数详细讲解

sorted(iterable, key=None, reverse=False)

iterable为可迭代类型

key 确定要调用的函数以用于对list的每个元素进行比较。通常使用lambda表达式

reverse默认值为False,此时sorted()按从小到大的顺序排序。当reverse=True时,按照从大到小的顺序排序。

key,reverse为可选参数。

举个例子

举例1:按照tuple中第二个值的大小对List进行排序

L = [('b', 2), ('a', 1), ('c', 3), ('d', 4)]

print(sorted(L, key=lambda x: x[1], reverse=True))

print(sorted(L, key=lambda x: x[1]))

结果:

[('d', 4), ('c', 3), ('b', 2), ('a', 1)]

[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

举例2:按照dict的长度对List进行排序

L = [{1: 2, 3: 4}, {1: 4}, {4: 5, 8: 9, 9: 2}]

print(sorted(L, key=lambda x: len(x)))

结果:

[{1: 4}, {1: 2, 3: 4}, {8: 9, 9: 2, 4: 5}]

使用operator模块的函数

itemgetter()可以简单的理解为itemgetter(x)就是获取第几个元素的值。

attrgetter()可以简单的理解为attrgetter(attrname)就是获取对象某个属性的值

举例:使用itemgetter()

from operator import itemgetter

L= [('b', 2), ('a', 1), ('c', 3), ('d', 4)]

print(sorted(L, key = itemgetter(1)))

结果:

[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

举例:使用attrgetter()

from operator import attrgetter

class Student:

def __init__(self, name, grade, age):

self.name = name

self.grade = grade

self.age = age

def __repr__(self):

return repr((self.name, self.grade, self.age))

student_objects = [

Student('john', 'A', 15),

Student('jane', 'B', 12),

Student('dave', 'B', 10),

]

print(sorted(student_objects, key=lambda stu: stu.age))

print(sorted(student_objects, key=attrgetter('age')))

结果:

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

使用operator模块的函数进行多级排序

举例:使用itemgetter()实现多级排序

from operator import itemgetter

L= [('b', 2), ('a', 2), ('c', 3), ('d', 4)]

print(sorted(L, key = itemgetter(1, 0)))

结果:

[('a', 2), ('b', 2), ('c', 3), ('d', 4)]

举例:使用attrgetter()实现多级排序

from operator import attrgetter

class Student:

def __init__(self, name, grade, age):

self.name = name

self.grade = grade

self.age = age

def __repr__(self):

return repr((self.name, self.grade, self.age))

student_objects = [

Student('john', 'A', 15),

Student('jane', 'B', 12),

Student('dave', 'B', 10),

]

print(sorted(student_objects, key=attrgetter('name', 'age')))

结果:

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值