前言:
工作中经常需要用到排序,单纯的数字排序还好说,但是有时候要按照对象的某一属性对对象进行排序,这时候会稍微麻烦点,不过 python 中有现成的方法解决这种窘境。
1.调用 list 排序方法
不 bb,直接上代码,总共三个例子
1.普通列表
2.复杂列表
3.对象排序
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == '__main__':
a = (0, 8, 2, 6, 3)
b = [('a', 12), ('b', 12), ('c', 1), ('d', 13), ('e', 2)]
person_list = [Person('q', 2), Person('w', 1), Person('e', 3), Person('r', 6)]
a.sort(cmp=None, key=None, reverse=True) # reverse 参数为 True 时逆向排序
print a
b.sort(key=lambda x: x[1])
print b
person_list.sort(key=lambda x: x.age)
for i in person_list:
print i.age
结果:
[8, 6, 3, 2, 0]
[('c', 1), ('e', 2), ('a', 12), ('b', 12), ('d', 13)]
1
2
3
6
2.调用 sorted 方法
和上面一样的例子,其实 sorted 方法和 list.sort 使用方法几乎一样
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == '__main__':
a = [0, 8, 2, 6, 3]
b = [('a', 12), ('b', 12), ('c', 1), ('d', 13), ('e', 2)]
person_list = [Person('q', 2), Person('w', 1), Person('e', 3), Person('r', 6)]
print sorted(a)
print sorted(b, key=lambda x: x[1])
m = sorted(person_list, key=lambda x: x.age, reverse=True)
for i in m:
print i.age
结果:
[0, 2, 3, 6, 8]
[('c', 1), ('e', 2), ('a', 12), ('b', 12), ('d', 13)]
6
3
2
1
3.结语
非常复杂的排序就需要自己写了,一般上面那个方法用一下就基本满足需求了。