30_列表排序_倒序_max_min简单介绍_列表的遍历

30.列表排序

修改原列表,不建新列表的排序 list.sort()

>>> a = [20,10,30,40]
>>> id(a)
46017416 
>>> a.sort() #默认是升序排列  a是 list   list对象  list.sort()
>>> a 
[10, 20, 30, 40] 
>>> a = [10,20,30,40]
>>> a.sort(reverse=True) #降序排列 
>>> a
[40, 30, 20, 10] 
>>> import random 
>>> random.shuffle(a) #打乱顺序  洗牌 将原来的对象顺序打乱
>>> a
[20, 40, 30, 10]

建新列表的排序

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

sorted 不仅可以对list 列表对象排序。 其他的 一些 可迭代对象 也是可以排序的。

>>> a = [20,10,30,40] 
>>> id(a)
46016008
>>> a = sorted(a) #默认升序
>>> a
[10, 20, 30, 40] 
>>> id(a) 
45907848 # id 改变了 所以不是同一个 对象了。 
>>> a = [20,10,30,40]
>>> id(a)
45840584
>>> b = sorted(a)
>>> b
[10, 20, 30, 40] 
>>> id(a) 
45840584 
>>> id(b) 
46016072 # id 改变了
>>> c = sorted(a,reverse=True) #降序
>>> c 
[40, 30, 20, 10]

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

reversed()返回迭代器

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

>>> a = [20,10,30,40] 
>>> c = reversed(a)
>>> c 
<list_reverseiterator object at 0x0000000002BCCEB8>  # 迭代对象
>>> list(c) # 当然 也可以 用 我前面讲的  [*c] 来解包
[40, 30, 10, 20]
>>> list(c)  # 再次 输出 则为空了。 这就是 迭代器。 只能使用 一次 。  所以非常节省 内存。
[]

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

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

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

maxmin

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

[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

>>> sum(range(100)) # 求 0 到 100 的 和 。 小学奥数题。 
5050

30.列表的遍历

for obj in listObj:  # for 循环
    print(obj)

复制列表所有的元素到新列表对象

如下代码实现列表元素的复制了吗?

list1 = [30,40,50] 
list2 = list1 

只是将 list2 也指向了列表对象,也就是说 list2 和 list2 持有地址值是相同的,
列表对象本 身的元素并没有复制

我们可以通过如下简单方式,实现列表元素内容的复制:

list1 = [30,40,50] 
list2 = [] + list1 # 和我之前讲的 sum 函数 以及 + 号 合并 列表 是一样的。

注:我们后面也会学习 copy模块,使用浅复制深复制实现我们的复制操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值