上一篇:列表嵌套 | 手把手教你入门Python之三十四
下一篇:元组的基本使用和字典的增删改查 | 手把手教你入门Python之三十六
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
列表推导式
所谓的列表推导式,就是指的轻量级循环创建列表
1. 基本的⽅式
2. 在循环的过程中使⽤if
3. 2个for循环
4. 3个for循环
练习
请写出⼀段 Python 代码实现分组⼀个 list ⾥⾯的元素,⽐如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]
参考答案:
a = [x for x in range(1,101)]
b = [a[x:x+3] for x in range(0,len(a),3)]
练习参考
列表的复制
查看以下代码,说出打印的结果。
a = 12
b = a
b = 13
print(b)
print(a)
nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1
nums2[0] = 100
print(nums2)
print(nums1)
思考:
- 为什么修改了 nums2⾥的数据,nums1的数据也会改变?
Python中的赋值运算都是引⽤(即内存地址)的传递。对于可变类型来说,修改原数据的值,会改变赋值
对象的值。
- 怎样nums1和nums2变成两个相互独⽴不受影响的列表?
使⽤列表的 copy ⽅法,或者 copy 模块就可以赋值一个列表。
列表的copy⽅法
使⽤列表的copy⽅法,可以直接将原来的列表进⾏复制,变成⼀个新的列表,这种复制⽅式是浅复制。
nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1.copy() # 调⽤列表的copy⽅法,可以复制出⼀个新的列表
nums2[0] = 100
# 修改新列表⾥的数据,不会影响到原有列表⾥的数据
print(nums2)
print(nums1)
copy模块的使⽤
除了使⽤列表的copy⽅法以外,Python还提供了copy模块来复制⼀个对象。copy模块提供了浅复制和深复制两种⽅式,它们的使⽤⽅式相同,但是执⾏的效果有⼀定的差异。
浅拷⻉
浅拷⻉是对于⼀个对象的顶层拷⻉,通俗的理解是:拷⻉了引⽤,并没有拷⻉内容。
import copy
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
# 浅拷⻉只会拷⻉最外层的对象,⾥⾯的数据不会拷⻉,⽽是直接指向
words2 = copy.copy(words1)
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['no', 'ok'], 'bad']
# wrods2 ⾥的 yes 被修改成了 no
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']
深拷⻉
深拷⻉是对于⼀个对象所有层次的递归拷⻉。
import copy
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
# 深拷⻉会将对象⾥的所有数据都进⾏拷⻉
words2 = copy.deepcopy(words1)
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['yes', 'ok'], 'bad']
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']
切⽚
列表和字符串⼀样,也⽀持切⽚,切⽚其实就是⼀种浅拷⻉。
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
words2 = words1[:]
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['no', 'ok'], 'bad']
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']