Python系列:列表的使用(2)

举报
数据分析与统计学之美 发表于 2021/09/27 21:21:51 2021/09/27
【摘要】 python系列第四课

今天就带着大家开始我们——Python学习的第二课,Python数据类型之列表的介绍2。
在这里插入图片描述
前面我们已经个大家介绍了列表的部分知识,今天我们接着来讲述列表的其余知识。

7. 列表排序的3种方法

7.1 sort()方法: 原地修改列表的排序方法。

  • 注 1: “ 默认是升序” ,参数 reverse=True,表示将列表降序。
  • 注 2: “ 原地修改列表” ,不建立新列表的排序方法。意思就是说:排序前后,列表存储地址不会变, 使用 id 函数,查看前后列表地址。
  • 注 3: a.sort 不能用一个新的变量去接收,因为列表前后地址没变,是在原地修改列表。所以不可能用新的变量接收。 append也是类似用法,不能用新的变量去接收。
>>> a = [20,10,40,30]
>>> print(id(a))
51969480
>>> a.sort()
>>> print(a)
[10, 20, 30, 40]
>>> print(id(a))
51969480
>>> b = [5,2,3,1,5,4]
>>> b.sort(reverse=True) #降序
>>> b
[5, 5, 4, 3, 2, 1]

7.2 sorted()方法:建立新列表的排序方法

  • 注 1: sorted 方法,属于内置函数。而不属于列表的方法。因此是: sorted(a)而不是 a.sorted()。
  • 注 2: sorted 方法, 重新建立新列表的排序,排序不是对本列表的排序,本列表并不会变,而是将排序后的列表存放在其他地址中。因此“可以用新变量接收” 。
  • 注 3: “ 默认是升序” , 参数 reverse=True,表示将列表降序。
>>> c = [20,10,40,30]
>>> print(id(c))
52034312
>>> d = sorted(c)
>>> print(d)
[10, 20, 30, 40]
>>> print(id(d))34
52033992
>>> e = [5,2,3,1,5,4]
>>> f = sorted(e,reverse=True)
>>> f
[5, 5, 4, 3, 2, 1]

7.3 reverse():列表反转,不排序

>>> x = [1,4,2,3,5]
>>> x.reverse()
>>> x
[5, 3, 2, 4, 1]

8. 列表遍历、列表嵌套

8.1 列表遍历

遍历列表, for 循环比 while 循环更好。
在这里插入图片描述

8.2 列表嵌套

在这里插入图片描述

9. 列表推导式

列表推导式,在日常编程中发挥着很重要的作用(尤其是利用python做数据清洗的时候),它能够简化我们的代码,极其好用,我这里将它的常见3种用法给大家总结一下。

9.1 一般形式

语法格式:[ expression for i in iterable ]

x = [1, 3, 5, 7, 9]
y = [i**2 for i in x]
print(y)

结果如下:
在这里插入图片描述

9.2 带if的列表解析式

语法:[ expression for i in iterable if…]

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [i for i in x if i % 2 == 0]
print(y)

结果如下:
在这里插入图片描述

9.3 带if…else…的列表解析式

语法:[ expression if…else… for i in iterable]

x = [1, 2, 3, 4, 5, 6]
y = ["我是偶数" if i % 2 == 0 else "我是奇数" for i in x]
print(y)

结果如下:
在这里插入图片描述

10. 列表赋值、浅拷贝、深拷贝

10.1 赋值

在这里插入图片描述
演示如下:

>>> li = [1,2,3]
>>> li2 = li
>>> id(li) == id(li2)
True
>>> li2[0] = 100
>>> li
[100, 2, 3]

10.2 浅拷贝

list(列表)的 copy 方法,实现的是浅拷贝。仅仅拷贝当前对象,而不会拷贝当前对象内部所关联的对象。
在这里插入图片描述
演示如下:

>>> li = [1,2,3]
>>> li2 = li.copy()
>>> id(li) == id(li2)
False
>>> li2[0] = 100
>>> li2
[100, 2, 3]
>>> li
[1, 2, 3]

10.3 深拷贝

如果列表中元素是可变类型,此时,浅拷贝无法实现期望的效果。若期望 li2 的改变不影响li,我们可以采用“深拷贝”操作。“深拷贝”不仅拷贝当前对象本身,同时还会拷贝当前对
象,所关联的可变对象,一直拷贝到没有可变对象为止。
在这里插入图片描述
演示如下:

>>> import copy
>>> li = [[1,2],[3,4]]
>>> li2 = copy.copy(li)
>>> li2[0][0] = 666
>>> li
[[666, 2], [3, 4]]
>>> li2
[[666, 2], [3, 4]]
--------------------------------------
>>> li = [[1,2],[3,4]]
>>> li2 = copy.deepcopy(li)39
>>> li2[0][0] = 666
>>> li
[[1, 2], [3, 4]]
>>> li2
[[666, 2], [3, 4]]

11. 列表中需要注意的地方

注 1: 列表元素可以各不相同,可以是任意类型。

>>> lis = [1,2.0,False,"abc"]
>>> lis
[1, 2.0, False, 'abc']

注 2: 列表大小可变,可以根据需要, 随时增加或者缩小列表。
注 3: ‘ 字符串’ 与‘ 列表’ 都是‘ 序列类型’ ,只不过“ 字符串” 是字符序列,“ 列表” 是任何元素的序列。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。