目录
- 前言
- 简述
- list.sort()
- 语法
- 返回值
- 实例
- 无参
- 参数key
- 参数reverse
- sorted()
- 语法
- 返回值
- 实例
- 无参
- 参数key
- 参数reverse
- operator.itemgetter
- 功能简述
- 实例
- List.sort与sored区别
- sorted原理:Timsort算法
- 扩展list原理
- 数据结构
- 心得
前言
经过一周的学习,对Python基础部分有了一定的了解。
在学习Python中list时,了解到了列表排序,于是对于列表排序有了兴趣,本文总结了Python列表排序的一些知识。
简述
Python中针对列表排序有两个方法:
- 使用list.sort()
- 使用内置函数sorted()
list.sort()
语法
list.sort(key=None, reverse=False)
参数名 | 含义 | 是否必填 |
---|---|---|
key | 主要是用来进行比较的元素,指定可迭代对象中的一个元素来进行排序 参数来源:list,参数数量:1 | 非必填 |
reverse | 排序规则,True代表降序, False代表升序,默认为False | 非必填 |
返回值
返回None
实例
无参
tempList = [6, 5, 7, 4, 3, 8, 2, 9, 1]
tempList.sort()
print(tempList) # tempList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
参数key
def get_value_sum(parm_dict):
return sum(dict(parm_dict).values())
tempList = [{'周芷若': 70, '宋青书': 20}, {'张无忌': 80}, {'杨逍': 50}, {'赵敏': 20}, {'张三丰': 100}]
tempList.sort(key=get_value_sum)
print(tempList) # tempList = [{'赵敏': 20}, {'杨逍': 50}, {'张无忌': 80}, {'周芷若': 70, '宋青书': 20}, {'张三丰': 100}]
参数reverse
tempList = [6, 5, 7, 4, 3, 8, 2, 9, 1]
tempList.sort(reverse=True)
print(tempList) # tempList = [9, 8, 7, 6, 5, 4, 3, 2, 1]
sorted()
语法
sorted(iterable, key=None, reverse=False)
参数名 | 含义 | 是否必填 |
---|---|---|
iterable | 可迭代对象 | 必填 |
key | 主要是用来进行比较的元素,指定可迭代对象中的一个元素来进行排序。 参数来源:iterable,参数数量:1 | 非必填 |
reverse | 排序规则,True代表降序, False代表升序,默认为False | 非必填 |
返回值
返回排序后的列表。
实例
无参
tempList = [6, 5, 7, 4, 3, 8, 2, 9, 1]
sortedList = sorted(tempList)
print(sortedList) # sortedList=[1, 2, 3, 4, 5, 6, 7, 8, 9]
参数key
def get_value_sum(parm_dict):
return sum(dict(parm_dict).values())
tempList = [{'周芷若': 70, '宋青书': 20}, {'张无忌': 80}, {'杨逍': 50}, {'赵敏': 20}, {'张三丰': 100}]
sortedList = sorted(tempList, key=get_value_sum)
print(sortedList) # sortedList = [{'赵敏': 20}, {'杨逍': 50}, {'张无忌': 80}, {'周芷若': 70, '宋青书': 20}, {'张三丰': 100}]
参数reverse
tempList = [6, 5, 7, 4, 3, 8, 2, 9, 1]
sortedList = sorted(tempList, reverse=True)
print(sortedList) # sortedList = [9, 8, 7, 6, 5, 4, 3, 2, 1]
operator.itemgetter
官方文档:https://docs.python.org/2/library/operator.html#module-operator
功能简述
选择指定的元组值作为key
实例
from operator import itemgetter
tempDict = {'data1': 3, 'data2': 1, 'data3': 2, 'data4': 4}
sortedList = sorted(tempDict.items(), key=itemgetter(1), reverse=True)
print(sortedList) # sortedList=[('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)]
List.sort与sored区别
- list.sort()只能对list类型进行排序。sorted()可以对list、dict、set类型排序
- list.sort()直接改变原list。sorted()不改变原list,排序后的结果作为返回值
注意点:sorted()对dict排序时默认使用key作为排序元素
tempDict={1: ‘e’, 3: ‘m’, 5: ‘e’, 9: ‘a’}
sorted(tempDict) 结果为[1, 3, 5, 9]
sorted原理:Timsort算法
待学习了解后补充
扩展list原理
数据结构
ob_item是用来保存元素的指针数组
allocated 是指申请的内存的槽的个数
typedef struct {
PyObject_VAR_HEAD
PyObject **ob_item;
Py_ssize_t allocated;
} PyListObject;
简述:有一个指针数组用来保存列表元素的指针,和一个可以在列表中放多少元素的标记.
insert/append过程简述
list先分配一个对象的内存块, 再给这个对象分配一个内存槽的大小。
这个内存槽的大小不等于元素的个数, 会比元素个数大一点,目的就是为了防止在每次添加元素的时候都去调用分配内存的函数,或者涉及到数据的搬移
pop/remove过程简述
同样在pop或删除元素时, 如果发现元素个数已经小于槽数的一半,就会缩减槽的大小
心得
主要学习了python语法的一些基础,原来做Java开发,排序作为一个重要部分,也是算法中常使用的一个组成,特此做一下总结,不过感觉python的语法在编码上更轻松一些