经过一周的学习,对Python基础部分有了一定的了解。
在学习Python中list时,了解到了列表排序,于是对于列表排序有了兴趣,本文总结了Python列表排序的一些知识。
Python中针对列表排序有两个方法:
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]
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}]
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(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]
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}]
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]
官方文档: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)]
注意点:sorted()对dict排序时默认使用key作为排序元素
tempDict={1: ‘e’, 3: ‘m’, 5: ‘e’, 9: ‘a’}
sorted(tempDict) 结果为[1, 3, 5, 9]
待学习了解后补充
ob_item是用来保存元素的指针数组
allocated 是指申请的内存的槽的个数
typedef struct {
PyObject_VAR_HEAD
PyObject **ob_item;
Py_ssize_t allocated;
} PyListObject;
简述:有一个指针数组用来保存列表元素的指针,和一个可以在列表中放多少元素的标记.
insert/append过程简述
list先分配一个对象的内存块, 再给这个对象分配一个内存槽的大小。
这个内存槽的大小不等于元素的个数, 会比元素个数大一点,目的就是为了防止在每次添加元素的时候都去调用分配内存的函数,或者涉及到数据的搬移
pop/remove过程简述
同样在pop或删除元素时, 如果发现元素个数已经小于槽数的一半,就会缩减槽的大小