【博学谷学习记录】超强总结,用心分享丨人工智能 Python基础 个人学习总结之列表排序

目录

  • 前言
    • 简述
    • list.sort()
      • 语法
      • 返回值
      • 实例
        • 无参
        • 参数key
        • 参数reverse
    • sorted()
      • 语法
      • 返回值
      • 实例
        • 无参
        • 参数key
        • 参数reverse
      • operator.itemgetter
        • 功能简述
        • 实例
    • List.sort与sored区别
    • sorted原理:Timsort算法
    • 扩展list原理
      • 数据结构

前言

经过一周的学习,对Python基础部分有了一定的了解。
在学习Python中list时,了解到了列表排序,于是对于列表排序有了兴趣,本文总结了Python列表排序的一些知识。

简述

Python中针对列表排序有两个方法:

  1. 使用list.sort()
  2. 使用内置函数sorted()
    【博学谷学习记录】超强总结,用心分享丨人工智能 Python基础 个人学习总结之列表排序_第1张图片

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区别

  1. list.sort()只能对list类型进行排序。sorted()可以对list、dict、set类型排序
  2. 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,学习,开发语言)