上一篇: 清單嵌套 | 手把手教你入門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']