20201008 038.列表

    科技2026-03-06  4

    列表排序

     

    修改原列表,不建新列表的排序

    >>> a = [20,10,30,40]

    >>> id(a)

    46017416

    >>> a.sort() #默认是升序排列

    >>> a

    [10, 20, 30, 40]

    >>> a = [10,20,30,40]

    >>> a.sort(reverse=True) #降序排列 可以写成a.reverse()

    >>> a

    [40, 30, 20, 10]

    >>> import random

    >>> random.shuffle(a) #打乱顺序

    >>> a

    [20, 40, 30, 10]

     

    建新列表的排序

    我们也可以通过内置函数 sorted()进行排序,这个方法返回新列表,不对原列表做修改。

    >>> a = [20, 10, 30, 40]

    >>> id(a)

    46016008

    >>> a = sorted(a) #默认升序

    >>> a

    [10, 20, 30, 40]

    >>> id(a)

    45907848

    >>> a = [20, 10, 30, 40]

    >>> id(a)

    45840584

    >>> b = sorted(a)

    >>> b

    [10, 20, 30, 40]

    >>> id(a)

    45840584

    >>> id(b)

    46016072

    >>> c = sorted(a,reverse=True) #降序

    >>> c

    [40, 30, 20, 10]

    通过上面操作,我们可以看出,生成的列表对象 b 和 c 都是完全新的列表对象。

     

    reversed()返回迭代器

    内置函数reversed()也支持进行逆序排列,与列表对象 reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。

    >>> a = [20,10,30,40]

    >>> c = reversed(a)

    >>> c

    <list_reverseiterator object at 0x0000000002BCCEB8> #一个指向列表最末一位地址的指针,只生效1次,遍历一遍位置就变化了,无效了。

    >>> list(c)

    [40, 30, 10, 20]

    >>> list(c)

    []

    我们打印输出 c 发现提示是:list_reverseiterator。也就是一个迭代对象。同时,我们使用list(c)进行输出,发现只能使用一次。第一次输出了元素,第二次为空。那是因为迭代对象在第一次时已经遍历结束了,第二次不能再使用。

    注:关于迭代对象的使用,后续章节会进行详细讲解。

     

    列表相关的其他内置函数汇总

     

    max 和 min

    用于返回列表中最大和最小值。

    [40, 30, 20, 10]

    >>> a = [3, 10, 20, 15, 9]

    >>> max(a)

    20

    >>> min(a)

    3

     

    sum

    对数值型列表的所有元素进行求和操作,对非数值型列表运算则会报错。

    >>> a = [3, 10, 20, 15, 9]

    >>> sum(a)

    57

    Processed: 0.020, SQL: 9