Python系列:列表的使用(2)
【摘要】 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)