一、列表
1.1 基本操作
Python的列表不要求元素類型一致
# 創(chuàng)建list
empty = [ ]
lst = [1, 'Lily', 34.5, '17345' ]
lst2 = [ '001', '2019-11-11', ['三文魚', '電烤箱'] ]
# 使用內(nèi)置函數(shù)len()求list內(nèi)元素個(gè)數(shù)
len(empty) # 0
len(lst) # 4
len(lst2) # 3
# 遍歷lst內(nèi)每個(gè)元素并求對(duì)應(yīng)的類型
for _ in lst:
print(f'{_} 的類型為{type(_)}')
向 lst2 的第三個(gè)元素 ['三文魚','電烤箱'] 內(nèi)再增加一個(gè)元素 '烤鴨'。
sku = lst2[2]
sku.append('烤鴨')
print(sku)
# ['三文魚', '電烤箱', '烤鴨']
# 在 sku 指定索引 1 處插入“牛腱子”
sku.insert(1, '牛腱子')
print(sku)
# 移除列表末尾元素
item = sku.pop()
print(sku)
# 移除列表中的指定元素
sku.remove('三文魚')
print(sku)
1.2 深淺拷貝
# 使用copy()方法復(fù)制對(duì)象
sku_deep = lst2[2].copy()
sku_deep[0] = '腱子'
print(lst2[2]) # 修改sku_deep時(shí), 不會(huì)影響lst2[2],因?yàn)樗鼈兾挥诓煌膬?nèi)存空間中
a = [1, 2, [3, 4, 5]]
ac = a.copy()
ac[0] = 10
ac[2][1] = 40
print(a[0] == ac[0]) # 返回False,證明實(shí)現(xiàn)了拷貝
print(a[2][1] == ac[2][1]) # 返回True,證明是淺拷貝,不是深拷貝
copy()只完成了一層的拷貝,即 [1,2, id([3,4,5])] 復(fù)制一份,而復(fù)制后,仍然指向 [3,4,5] 所在的內(nèi)存空間。
要想實(shí)現(xiàn)深度拷貝,需要使用 copy 模塊的 deepcopy 函數(shù)。
from copy import deepcopy
a = [1, 2, [3, 4, 5]]
ac = deepcopy(a)
ac[0] = 10
ac[2][1] = 40
print(a[0] == ac[0])
print(a[2][1] == ac[2][1]) # 返回False, 證明內(nèi)嵌list全部完成了復(fù)制, 指向了不同的內(nèi)存區(qū)域
1.3 切片
# 生成list
a = list(range(1, 20, 3))
print(a)
print(a[-1]) # 獲取a的最后一個(gè)元素
print(a[:-1]) # 獲取除最后一個(gè)元素之外的切片
print(a[1:5]) # 生成索引為[1, 5) 的切片
print(a[1:5:2]) # 生成索引為[1, 5)但步長(zhǎng)為2的切片
print(a[::3]) # 生成索引為[0, len(a))但步長(zhǎng)為3的切片
print(a[::-3]) # 生成索引為[len(a), 0)但步長(zhǎng)為3的切片
print(a[::-1]) # 生成逆向列表
二、 元組
元組是不可變對(duì)象, 沒有增加、刪除元素的方法。
2.1 基本操作
# 創(chuàng)建元組對(duì)象
a = () # 空元組對(duì)象
b = (1, 'xiaoming', 29.5, '17312662388')
c = ('001', '2019-11-11', ['三文魚', '電烤箱'])
d = (10,) # 創(chuàng)建單個(gè)元素的元組必須加逗號(hào)
# 列表和元組都有一個(gè)很好用的統(tǒng)計(jì)方法 count,實(shí)現(xiàn)對(duì)某個(gè)元素的個(gè)數(shù)統(tǒng)計(jì)
from numpy import random
a = random.randint(1, 5, 10) # 從[1,5) 區(qū)間隨機(jī)取10個(gè)數(shù)
al = list(a)
at = tuple(a)
print(a)
print(al.count(3)) # 統(tǒng)計(jì)list中元素3的個(gè)數(shù)
print(at.count(3)) # 統(tǒng)計(jì)tuple中元素3的個(gè)數(shù)
2.2 可變與不可變
列表可以增加刪除元素,它是可變的。
tuple 就是一個(gè)典型的不可變?nèi)萜鲗?duì)象。對(duì)它而言,同樣也可以修改嵌套對(duì)象的取值,但這并沒有真正改變 tuple 內(nèi)的元素。
a =(1, 3, [5,7], 9, 11, 13)
a[2].insert(1, 6)
元組一旦創(chuàng)建之后, 長(zhǎng)度就被唯一確定, 這就是不可變對(duì)象的本質(zhì)。
但是,對(duì)于list而言,列表長(zhǎng)度會(huì)有增有減,所以,它是可變的。