阅读之前看这里👉:博主是正在进行数据分析师求职的一员,博客记录的是在学习和求职过程中一些总结,也希望和大家一起进步,在记录之时,未免存在很多疏漏和不全,如有问题,还请私聊博主指正。
博客地址:天阑之蓝的博客,学习过程中不免有困难和迷茫,希望大家都能在这学习的过程中肯定自己,超越自己,最终创造自己。
目录
列表排序
list.sort() 和sorted()
在Python列表里有一个内置的list.sort()
方法可以直接修改列表。还有一个sorted()
内置函数,它会从一个可迭代对象构建一个新的排序列表。
区别如下:
array1 = [5, 2, 3, 1, 4]
a = sorted([5, 2, 3, 1, 4])
我们可以看到结果中array1并没有变化,返回的是一个新的已排序列表a。
array1 = [5, 2, 3, 1, 4]
array1.sort()
返回的结果是array1已经变成了一个排序好的列表,说明列表本身发生了改变。
sort()和sorted()的区别:
- list.sort() 方法,它会直接修改原列表(并返回 None 以避免混淆),通常来说它不如 sorted() 方便 ——— 但如果你不需要原列表,它会更有效率。
- list.sort() 方法只是为列表定义的,而 sorted() 函数可以接受任何可迭代对象。
list.sort()和 sorted()的关键函数
list.sort()
和 sorted()
都有一个 key 形参来指定在进行比较之前要在每个列表元素上进行调用的函数。
sort(*, key=None, reverse=False)
sorted(iterable, *, key=None, reverse=False)
此方法会对列表进行原地排序,只使用 < 来进行各项间比较。 异常不会被屏蔽 —— 如果有任何比较操作失败,整个排序操作将失败(而列表可能会处于被部分修改的状态)。
sort() 接受两个仅限以关键字形式传入的参数 (仅限关键字参数):
key 指定带有一个参数的函数,用于从每个列表元素中提取比较键 (例如 key=str.lower)。 对应于列表中每一项的键会被计算一次,然后在整个排序过程中使用。 默认值 None 表示直接对列表项排序而不计算一个单独的键值。
reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序。
例如,下面是一个不区分大小写的字符串比较:
sorted("This is a test string from Andrew".split(), key=str.lower)
结果:['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
key 形参的值应该是一个函数,它接受一个参数并并返回一个用于排序的键。这种技巧速度很快,因为对于每个输入记录只会调用一次 key 函数。
一种常见的模式是使用对象的一些索引作为键对复杂对象进行排序。例如:
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),
]
sorted(student_objects, key=lambda student: student