03 | list 和 tuple 的基本操作、深淺拷貝和切片操作等

一、列表

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ì)有增有減,所以,它是可變的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容