国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【學(xué)習(xí)筆記】Python核心技術(shù)與實(shí)戰(zhàn)-基礎(chǔ)篇-03列表和元組,到底用哪個(gè)?

這篇具有很好參考價(jià)值的文章主要介紹了【學(xué)習(xí)筆記】Python核心技術(shù)與實(shí)戰(zhàn)-基礎(chǔ)篇-03列表和元組,到底用哪個(gè)?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

列表和元組基礎(chǔ)

概念

列表和元組,都是一個(gè)可以放置任意數(shù)據(jù)類型的有序集合。
在絕大多數(shù)編程語言中,集合的數(shù)據(jù)類型必須一致。不過,對(duì)于 Python 的列表和元組來 說,并無此要求:

l = [1, 2, 'hello', 'world'] # 列表中同時(shí)含有 int 和 string 類型的元素
l 
[1, 2, 'hello', 'world']
 
tup = ('jason', 22) # 元組中同時(shí)含有 int 和 string 類型的元素 
tup 
('jason', 22)

區(qū)別

列表是動(dòng)態(tài)的,長(zhǎng)度大小不固定,可以隨意地增加、刪減或者改變?cè)兀╩utable)。
而元組是靜態(tài)的,長(zhǎng)度大小固定,無法增加刪減或者改變(immutable)。

如何改變?cè)M?
重新開辟一塊內(nèi)存,創(chuàng)建新的元組

tup = (1, 2, 3, 4) 
new_tup = tup + (5, ) # 創(chuàng)建新的元組 new_tup,并依次填充原元組的值
new _tup 
(1, 2, 3, 4, 5)
 

列表和元組的基礎(chǔ)操作和注意事項(xiàng)

  1. 都支持負(fù)數(shù)索引,1 表示最后一個(gè)元 素,-2 表示倒數(shù)第二個(gè)元素,以此類推。
l = [1, 2, 3, 4] 
l[-1] 
4
 
tup = (1, 2, 3, 4) 
tup[-1]
4

  1. 都支持切片(遵循顧前不顧后原則)
l = [1, 2, 3, 4] 
l[1:3] # 返回列表中索引從 1 到 2 的子列表
[2, 3]
 
tup = (1, 2, 3, 4) 
tup[1:3] # 返回元組中索引從 1 到 2 的子元組 
(2, 3) 
  1. 都可以嵌套
l = [[1, 2, 3], [4, 5],(4,7),{"a":1}] # 列表的每一個(gè)元素也是一個(gè)列表,也可以嵌套dict、tuple
tup = ((1, 2, 3), (4, 5, 6)) # 元組的每一個(gè)元素也是一元組
  1. 轉(zhuǎn)換類型
list((1, 2, 3)) 
[1, 2, 3]

tuple([1, 2, 3]) 
(1, 2, 3)
  1. 內(nèi)置函數(shù)【學(xué)習(xí)筆記】Python核心技術(shù)與實(shí)戰(zhàn)-基礎(chǔ)篇-03列表和元組,到底用哪個(gè)?

列表和元組存儲(chǔ)方式的差異

列表和元組最重要的區(qū)別就是,列表是動(dòng)態(tài)的、可變的,而元組是靜態(tài)的、不可 變的。這樣的差異,勢(shì)必會(huì)影響兩者存儲(chǔ)方式。我們可以來看下面的例子:

l = [1, 2, 3] 
l.__sizeof__() 
64 
tup = (1, 2, 3) 
tup.__sizeof__() 
48

為什么列表要比元組的存儲(chǔ)空間多16字節(jié)?
由于列表是動(dòng)態(tài)的,所以它需要存儲(chǔ)指針,來指向?qū)?yīng)的元素(上述例子中,對(duì)于 int 型,8 字節(jié))。另外,由于列表可變,所以需要額外存儲(chǔ)已經(jīng)分配的長(zhǎng)度大?。? 字 節(jié)),這樣才可以實(shí)時(shí)追蹤列表空間的使用情況,當(dāng)空間不足時(shí),及時(shí)分配額外空間。【學(xué)習(xí)筆記】Python核心技術(shù)與實(shí)戰(zhàn)-基礎(chǔ)篇-03列表和元組,到底用哪個(gè)?
上面的例子,大概描述了列表空間分配的過程。我們可以看到,為了減小每次增加 / 刪減 操作時(shí)空間分配的開銷,Python 每次分配空間時(shí)都會(huì)額外多分配一些,這樣的機(jī)制 (over-allocating)保證了其操作的高效性:增加 / 刪除的時(shí)間復(fù)雜度均為 O(1)。
但是對(duì)于元組,情況就不同了。元組長(zhǎng)度大小固定,元素不可變,所以存儲(chǔ)空間固定。

列表和元組的性能

通過學(xué)習(xí)列表和元組存儲(chǔ)方式的差異,我們可以得出結(jié)論:元組要比列表更加輕量級(jí)一些, 所以總體上來說,元組的性能速度要略優(yōu)于列表。
另外,Python 會(huì)在后臺(tái),對(duì)靜態(tài)數(shù)據(jù)做一些資源緩存(resource caching)。通常來說, 因?yàn)槔厥諜C(jī)制的存在,如果一些變量不被使用了,Python 就會(huì)回收它們所占用的內(nèi)存,返還給操作系統(tǒng),以便其他變量或其他應(yīng)用使用。
但是對(duì)于一些靜態(tài)變量,比如元組,如果它不被使用并且占用空間不大時(shí),Python 會(huì)暫時(shí) 緩存這部分內(nèi)存。這樣,下次我們?cè)賱?chuàng)建同樣大小的元組時(shí),Python 就可以不用再向操作 系統(tǒng)發(fā)出請(qǐng)求,去尋找內(nèi)存,而是可以直接分配之前緩存的內(nèi)存空間,這樣就能大大加快程 序的運(yùn)行速度。
下面的例子,是計(jì)算初始化一個(gè)相同元素的列表和元組分別所需的時(shí)間。我們可以看到,元 組的初始化速度,要比列表快 5 倍。

python3 -m timeit 'x=(1,2,3,4,5,6)' 
20000000 loops, best of 5: 9.97 nsec per loop 
python3 -m timeit 'x=[1,2,3,4,5,6]' 
5000000 loops, best of 5: 50.1 nsec per loo

但如果是索引操作的話,兩者的速度差別非常小,幾乎可以忽略不計(jì)。

python3 -m timeit -s 'x=[1,2,3,4,5,6]' 'y=x[3]' 
10000000 loops, best of 5: 22.2 nsec per loop 
python3 -m timeit -s 'x=(1,2,3,4,5,6)' 'y=x[3]' 
10000000 loops, best of 5: 21.9 nsec per loo

當(dāng)然,如果你想要增加、刪減或者改變?cè)?,那么列表顯然更優(yōu)。原因你現(xiàn)在肯定知道了, 那就是對(duì)于元組,你必須得通過新建一個(gè)元組來完成。

列表和元組的使用場(chǎng)景

  1. 如果存儲(chǔ)的數(shù)據(jù)和數(shù)量不變,比如你有一個(gè)函數(shù),需要返回的是一個(gè)地點(diǎn)的經(jīng)緯度,然 后直接傳給前端渲染,那么肯定選用元組更合適。
  2. 如果存儲(chǔ)的數(shù)據(jù)或數(shù)量是可變的,比如社交平臺(tái)上的一個(gè)日志功能,是統(tǒng)計(jì)一個(gè)用戶在 一周之內(nèi)看了哪些用戶的帖子,那么則用列表更合適。

總結(jié)

關(guān)于列表和元組,我們今天聊了很多,最后一起總結(jié)一下你必須掌握的內(nèi)容。
總的來說,列表和元組都是有序的,可以存儲(chǔ)任意數(shù)據(jù)類型的集合,區(qū)別主要在于下面這兩點(diǎn)。

  1. 列表是動(dòng)態(tài)的,長(zhǎng)度可變,可以隨意的增加、刪減或改變?cè)?。列表的存?chǔ)空間略大于元組,性能略遜于元組。
  2. 元組是靜態(tài)的,長(zhǎng)度大小固定,不可以對(duì)元素進(jìn)行增加、刪減或者改變操作。元組相對(duì)于 列表更加輕量級(jí),性能稍優(yōu)。

思考題

想創(chuàng)建一個(gè)空的列表,我們可以用下面的 A、B 兩種方式,請(qǐng)問它們?cè)谛噬嫌惺裁磪^(qū) 別嗎?我們應(yīng)該優(yōu)先考慮使用哪種呢?可以說說你的理由。

# 創(chuàng)建空列表 
# option A 
empty_list = list()
 
# option B
 empty_list = []

區(qū)別主要在于list()是一個(gè)function call,Python的function call會(huì)創(chuàng)建stack,并且進(jìn)行一系列參 數(shù)檢查的操作,比較expensive,反觀[]是一個(gè)內(nèi)置的C函數(shù),可以直接被調(diào)用,因此效率高。

另外, list和tuple的內(nèi)部實(shí)現(xiàn)都是array的形式,list因?yàn)榭勺?,所以是一個(gè)over-allocate的 array,tuple因?yàn)椴豢勺?,所以長(zhǎng)度大小固定文章來源地址http://www.zghlxwxcb.cn/news/detail-475908.html

到了這里,關(guān)于【學(xué)習(xí)筆記】Python核心技術(shù)與實(shí)戰(zhàn)-基礎(chǔ)篇-03列表和元組,到底用哪個(gè)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(七)

    《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(七)

    壓縮(compression)秉承了用時(shí)間去換空間的經(jīng)典 trade-off 思想,具體來說就是用 CPU 時(shí)間去換磁盤空間或網(wǎng)絡(luò) I/O 傳輸量,希望以較小的 CPU 開銷帶來更少的磁盤占用或更少的網(wǎng)絡(luò) I/O 傳輸。 目前 Kafka 共有兩大類消息格式,社區(qū)分別稱之為 V1 版本和 V2 版本。 不論是哪個(gè)版本,

    2024年02月11日
    瀏覽(51)
  • 《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(五)

    嚴(yán)格來說這些配置并不單單指 Kafka 服務(wù)器端的配置,其中既有 Broker 端參數(shù),也有主題級(jí)別的參數(shù)、JVM 端參數(shù)和操作系統(tǒng)級(jí)別的參數(shù)。 Broker 端參數(shù)也被稱為靜態(tài)參數(shù)(Static Configs): 所謂 靜態(tài)參數(shù) ,是指你必須在 Kafka 的配置文件 server.properties 中進(jìn)行設(shè)置的參數(shù) ,不管你

    2024年02月11日
    瀏覽(23)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(一)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(一)

    為了保證數(shù)據(jù)的可靠性,Redis 需要在磁盤上讀寫 AOF 和 RDB,但在高并發(fā)場(chǎng)景里,這就會(huì)直接帶來兩個(gè)新問題: 一個(gè)是寫 AOF 和 RDB 會(huì)造成 Redis 性能抖動(dòng); 另一個(gè)是 Redis 集群數(shù)據(jù)同步和實(shí)例恢復(fù)時(shí),讀 RDB 比較慢,限制了同步和恢復(fù)速度。 其實(shí),一個(gè)可行的解決方案就是使用

    2024年02月12日
    瀏覽(33)
  • 《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(九)

    《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(九)

    攔截器基本思想就是允許應(yīng)用程序在不修改邏輯的情況下,動(dòng)態(tài)地實(shí)現(xiàn)一組可插拔的事件處理邏輯鏈。 它能夠在主業(yè)務(wù)操作的前后多個(gè)時(shí)間點(diǎn)上插入對(duì)應(yīng)的“攔截”邏輯。 Spring MVC 攔截器的工作原理: Kafka 攔截器借鑒了這樣的設(shè)計(jì)思路:可以在消息處理的前后多個(gè)時(shí)點(diǎn)動(dòng)態(tài)

    2024年02月12日
    瀏覽(25)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(五)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(五)

    那我們總說的 Redis 具有高可靠性,又是什么意思呢? 其實(shí),這里有兩層含義:一是數(shù)據(jù)盡量少丟失,二是服務(wù)盡量少中斷。 AOF 和 RDB 保證了前者,而對(duì)于后者,Redis 的做法就是增加副本冗余量,將?份數(shù)據(jù)同時(shí)保存在多個(gè)實(shí)例上。 即使有一個(gè)實(shí)例出現(xiàn)了故障,需要過一段時(shí)

    2024年02月13日
    瀏覽(19)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(四)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(四)

    一旦服務(wù)器宕機(jī),內(nèi)存中的數(shù)據(jù)將全部丟失。目前,Redis 的持久化主要有兩大機(jī)制,即 AOF 日志和 RDB 快照。 AOF 日志是如何實(shí)現(xiàn)的? 我們比較熟悉的是數(shù)據(jù)庫(kù)的寫前日志(Write Ahead Log, WAL),也就是說,在實(shí)際寫數(shù)據(jù)前,先把修改的數(shù)據(jù)記到日志文件中,以便故障時(shí)進(jìn)行恢復(fù)

    2024年02月12日
    瀏覽(21)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(三)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(三)

    Redis 是單線程,主要是指 Redis 的網(wǎng)絡(luò) IO 和鍵值對(duì)讀寫是由一個(gè)線程來完成的,這也是 Redis 對(duì)外提供鍵值存儲(chǔ)服務(wù)的主要流程。但 Redis 的其他功能,比如持久化、異步刪除、集群數(shù)據(jù)同步等,其實(shí)是由額外的線程執(zhí)行的。 多線程的開銷 我們剛開始增加線程數(shù)時(shí),系統(tǒng)吞吐率

    2024年02月12日
    瀏覽(32)
  • 《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(十)

    Apache Kafka 的所有通信都是基于 TCP 的,而不是基于 HTTP 或其他協(xié)議。 在開發(fā)客戶端時(shí),能夠利用 TCP 本身提供的一些高級(jí)功能,比如多路復(fù)用請(qǐng)求以及同時(shí)輪詢多個(gè)連接的能力。 除了 TCP 提供的這些高級(jí)功能有可能被 Kafka 客戶端的開發(fā)人員使用之外,目前已知的 HTTP 庫(kù)在很多

    2024年02月11日
    瀏覽(45)
  • Redis核心技術(shù)與實(shí)戰(zhàn)-學(xué)習(xí)筆記(十五):消息隊(duì)列(Redis的解決方案)

    Redis核心技術(shù)與實(shí)戰(zhàn)-學(xué)習(xí)筆記(十五):消息隊(duì)列(Redis的解決方案)

    消息隊(duì)列: 分布式系統(tǒng) 必備的一個(gè) 基礎(chǔ)軟件 ,能支持 組件通信消息 的 快速讀寫 Redis本身 支持?jǐn)?shù)據(jù)的快速訪問 ,滿足 消息隊(duì)列的讀寫性能需求 消息隊(duì)列存取消息的過程 在分布式系統(tǒng)中,兩個(gè)組件要基于消息隊(duì)列進(jìn)行通信,一個(gè)組件就會(huì)把要處理的數(shù)據(jù)以消息的形式傳遞

    2023年04月09日
    瀏覽(22)
  • Python學(xué)習(xí)筆記_基礎(chǔ)篇(三)_數(shù)據(jù)類型之列表

    Python學(xué)習(xí)筆記_基礎(chǔ)篇(三)_數(shù)據(jù)類型之列表

    一.基本數(shù)據(jù)類型 整數(shù):int 字符串:str(注:t等于一個(gè)tab鍵) 布爾值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict 注:所有的數(shù)據(jù)類型都存在想對(duì)應(yīng)的類列里 二.列表所有數(shù)據(jù)類型: 基本操作: 索引 切片 追加 刪除 長(zhǎng)度 切片 循環(huán) 包含 list 三

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包