0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

列表與元組

汽車電子技術 ? 來源:安迪python學習筆記 ? 作者:安迪 ? 2023-02-23 13:58 ? 次閱讀

13、列表拓展

1.列表的元素

首先,我們來聊聊列表的元素。

雖然你已經(jīng)有所了解,

但還是看看下面這張圖復習一下。

圖片

編程里,列表中的數(shù)據(jù)被稱為列表的元素。

以上面例子來看,列表 skills 中有兩個元素,

分別是 '英語六級' 和 '吉他',

且這兩個元素都是字符串。

列表是一個包容的數(shù)據(jù)類型.

其中的元素可以為任意數(shù)據(jù)類型,

包括整數(shù)、浮點數(shù)、字符串,列表,

以及后續(xù)我們會學到的元組,字典等。

舉個例子,我們以 bag 來代表知楓的書包,

pen_bag 來代表書包內(nèi)的筆袋。

我們先閱讀一段代碼。

圖片

在這串代碼里面,我創(chuàng)建了兩個列表,

分別為:bag 和 pen_bag。

其中在列表 bag 里面,一共有三個元素,

包括兩個字符串:'電腦','雨傘';

以及一個我們創(chuàng)建的列表 pen_bag。

我們打印一下列表 bag 看看。

圖片

圖片

此時你可以看到終端顯示為:

['電腦', '雨傘', ['筆', '尺子', '涂改液']] 這個結果。

也就是說,列表中的列表,同樣是一個元素。

圖片

這就好比知楓的書包里可以放電腦外,

還可以再放一個小包裝筆尺。

列表元素可以是任何數(shù)據(jù)類型。

它不止像上面這個例子那樣,

可以是一個列表,

它還可以是我們后面會學到的字典和元組。

總之,無論是什么數(shù)據(jù)類型,

我們都可以把它看成一個元素。

圖片

圖片

打印出來的兩個結果是兩個一樣的列表。

這是因為創(chuàng)建列表時,直接將數(shù)據(jù)寫在里面,

和使用變量來代替的效果是一樣的。

2 索引取值

列表中的每個元素都有其對應位置的數(shù)字編號,即索引。

只要在列表后面加一個中括號 [],

圖片

Python 里從 0 開始計數(shù),

所以 '吉他' 的索引是 1,

'英文六級'的索引是 0。

例如:list[n] 它表示的是:

從左往右數(shù),第 n+1 個元素。

除此之外,Python 還支持用負數(shù)做索引,

比如 list[-n] 它表示的是:

從右往左數(shù),第 n 個元素。

所以如果你想提取列表 skills 中的 '吉他',

你還可以寫成:skills[-1]。

用負數(shù)做索引這種用法會使用在你不知道列表有多長,

但你就是想拿到最后倒數(shù)第 n 個元素的時候。

圖片

圖片

【代碼練習】把小包 bag 中的'筆'拿出來。

第一步我們先要從書包 bag 把小包 pen_bag 拿出來。

圖片

圖片

第二步我們需要把小包 bag 中的'筆'拿出來。

圖片

圖片

這個過程,很像剝洋蔥,

一層一層地去把列表打開,拿到我們想要的東西。

總結一下,當需要兩次索引的時候,

在 Python 上的格式為:list[索引][索引]。

3.3 列表的切片

索引 [a:b] 的切取范圍是:a <= X < b

要從列表里取多個元素怎么辦?

此時,我們會用到一種新的技巧:切片 。

切片即在列表中切取一段數(shù)據(jù),

生成一個新的列表。

圖片

圖片

在切片時,索引 [a:b] 的切取范圍是:

a <= X < b,

左邊有等于號,而右邊是沒有等于號的。

圖片

對照著看上面的圖片,

給列表中的每個元素前面都加上它的索引。

切片,就是取出兩個索引中間夾著的元素。

口訣:“列表切片怎么用,記好取左不取右”。

冒號左右的值可以不填,

不填的時候則代表一取到底。

圖片

圖片

3.4 添加列表的元素

圖片

圖片

append :添加的意思。

用法格式是:列表名.append(元素)。

通過 append() 添加元素,

元素會被添加到列表的最后一個位置。

圖片

3.5 列表的修改

修改列表內(nèi)的元素時,直接重新賦值就好了。

賦值的方法是:列表名[索引] = 新內(nèi)容

圖片

圖片

圖片

  1. 元組

元組(tuple),是一種數(shù)據(jù)類型。

與列表在形式上有一個區(qū)別:

列表用中括號[],而元組是用小括號()。

圖片

元組可以存儲大量數(shù)據(jù),

和列表一樣都可以用同樣的方式取值,

都可以用同樣的方式切片等。

圖片

圖片

元組和列表最大的不同之處在于:

元組,一經(jīng)創(chuàng)建則不可修改。

如果元組里只有一個元素,后面也要加逗號,如 foods = ('龜苓膏',),

如果不加逗號的話,

那它就不會被判定成元組。

  1. 序列
  2. 序列的概念

列表和元組都是由按順序排列的數(shù)據(jù)組成的。

在 Python 中,把像列表和元組這樣的數(shù)據(jù)類型,都叫做序列。

序列:就是一組多個數(shù)據(jù)按順序排成一列。

序列內(nèi)有一個個元素,

每個元素都有對應的索引,

用于標記元素的位置。

還有一類序列,字!符!串!

字符串本質(zhì)上也可以理解成,

一個個字符按照一定的順序排列起來的串兒。

引號內(nèi)每一個字符都按著一定的順序排列,

并且每個字符也是有對應的索引的。

所以它叫字符串,完美符合序列的定義。

作為序列,

它們都有元素以及元素所對應的索引,

并都可以進行索引取值、切片、等操作。

圖片

  1. 成員運算符

序列可以進行某個元素是否在序列內(nèi)的判斷。

以 skills = ['英語六級', '吉他'] 舉個例子。

假如我們想要判斷一項能力(元素)是否還在我掌握的技能(skills 列表)里,該怎么做呢?

Python 里有成員運算符 in,

可以判斷一個元素是否在某一個序列中。

結合 if 來判斷某個元素是否在序列內(nèi)時,

常見寫法是:if 元素 in 序列,

可以理解為如果某個元素在列表內(nèi),

就執(zhí)行一些代碼。

圖片

圖片

拓展一個知識點,

如果想要判斷一個元素是否不存在列表呢,

可以用:if 元素 not in 序列 來判斷。

圖片

圖片

17、序列拓展:len count list

  1. 課前說明

之前學習了列表、元組、字符串這類序列,

本次課程學習 3 個序列的應用方法。

不妨想象一下,你即將擔任將軍,

前任將軍,給你留了一支部隊,

部隊的變量名為 army,用 python 如下圖表示:

army =('炮兵', '步兵', '步兵', '步兵', '醫(yī)療兵', '步兵', '步兵', '炮兵', '步兵', '步兵', '醫(yī)療兵', '步兵', '步兵', '炮兵', '步兵', '步兵', '醫(yī)療兵', '步兵', '步兵')

部隊的數(shù)據(jù)類型是元組,士兵相當于元組里的元素。

新官上任,第一步要做的就是清點部隊一共有多少人,

方便后續(xù)對部隊重新整編。

如何清點呢?

這里有一個函數(shù):len(),剛好能夠幫助到你。

  1. len()

len 是 length 的縮寫,中文是長度的意思。

對于列表和元組這類序列來說,

所謂長度是指元素的個數(shù)。

將列表、元組、字符串等數(shù)據(jù)類型傳入到 len() 中,

其長度將以整數(shù)形式返回。

圖片

圖片

打印出返回的結果是 3 ,

說明該元組的長度為 3 ,

即有 3 個元素。

嘗試用 len() 來清點一下你的部隊一共有多少人吧。

圖片

圖片

你在終端看到返回結果為 19 ,

代表部隊中一共有 19 名士兵。

圖片

  1. count()

count 在英文里是計算的意思。

序列.count(元素)。

一支部隊里還有各類兵種,他們?nèi)藬?shù)不一。

我們還需要清算部隊各兵種的數(shù)量。

count()用于統(tǒng)計序列(包括:列表、元組等)中某個元素出現(xiàn)的次數(shù)。

count()會以整數(shù)的數(shù)據(jù)類型返回該元素在序列內(nèi)的個數(shù)。

用count()統(tǒng)計混在兔中的免的個數(shù)。

圖片

圖片

如終端所示,一共有 3 個免。

類比到你的部隊,count()就是相當于要士兵報數(shù)。

若傳入參數(shù)'炮兵'到count()中,那么就返回'炮兵'的個數(shù)。

圖片

圖片

圖片

需要注意的是:len()、count()返回的數(shù)據(jù)類型是整數(shù),

所以要用 str() 轉化為字符串后才可以與字符串作拼接。

  1. list()

List:中文的意思是列表。

為什么將部隊設置元組,而不是列表呢?

之所以將各個部隊都設置為元組而非列表,

是為了防止人員(元組 army 內(nèi)的元素)隨意變動。

現(xiàn)在想加強軍隊訓練,需要添加一位教官來管理。

注意,元組沒法對內(nèi)部的元素做修改、增加等操作,

這時候就需要用 list() 做數(shù)據(jù)轉換啦。

list 在英文中就是列表的意思,

將需要轉換的數(shù)據(jù)類型作為參數(shù)輸入list()中,

就可以把它轉換為對應的數(shù)據(jù)類型。

我們來看一個將元組轉換為列表的例子,

圖片

圖片

打印結果顯示元組('a', 'b', 'c')的小括號變成['a', 'b', 'c']的中括號了,

說明它已經(jīng)成功將元組轉換成列表的形式進行輸出。

需要注意的是,list() 只是將元組轉換成列表的形式,

元組的本身并不會發(fā)生改變。

將元組 army 轉換為列表后,添加一個新的元素 '教官'。

圖片

圖片

圖片

  1. 總結歸納

圖片

18、列表元組課后練習

【牛刀小試】

選擇題 1 - 序列 & 數(shù)據(jù)類型

字符串是序列的一種,而且屬于不可變數(shù)據(jù)類型。

多選題:根據(jù)以上信息,請你選出正確的選項:

A. 字符串不可以進行切片

B. 字符串可以增加元素,但是不能刪除元素

C. 字符串內(nèi)每一個字符都是按著一定的順序排列的

D. 字符串一經(jīng)創(chuàng)建之后,就不能修改

答案:CD

A序列都可以進行索引取值和切片,字符串是序列的一種,因此可以進行切片。

B 不可變數(shù)據(jù)類型一經(jīng)創(chuàng)建就不可修改,字符串屬于不可變數(shù)據(jù)類型,因此既不能增加元素,也不能刪除元素。

選擇題 2 - 索引 & 切片

閱讀下面這兩行代碼,并結合你對列表和元組的理解,完成選擇題。

num_list = [1, 3, 5, 7, 9, 11, 13]

num_tuple = (1, 3, 5, 7, 9, 11, 13)

單選題:觀察選項中的代碼,選出正確的一項:

A. num_list[-2] 的結果是:[11]

B. num_list[2:3] 的結果是:[5, 7]

C. num_tuple[4] 的結果是:(9,)

D. num_tuple[5:6] 的結果是:(11,)

答案是D

A num_list[-2] 表示列表的負向索引,只能取到數(shù)值,而不是選項中的列表。

B num_list[2:3] 表示列表的切片,按照“取左不取右”的原則,只能取到從左到右第 2+1 個元素組成的列表 [5],而非選項中的 [5, 7]。

C num_tuple[4] 表示元組的索引,同樣只能取到數(shù)值,而不是選項中的元組 (9,)。

D num_tuple[5:6] 表示元組的切片,可以取到從左到右第 5+1 個元素組成的元組,即 (11,)。

運行代碼驗證:

圖片

圖片

選擇題 3 - 成員運算符

單選題:請你選出結果為 True 的選項:

A. print(4 in [1, 2, 3, [4, 5, 6]])

B. print(4 in [4, 5, 6])

C. print(4 in [[4, 5, 6]])

答案是 B

觀察三個選項,可以看到其中的代碼功能是判斷整數(shù) 4 是否在某個列表中。

如果在,輸出結果為真;否則,輸出結果為假。

A 選項中,[1, 2, 3, [4, 5, 6]] 是一個嵌套列表,它有四個元素,分別是 1,2,3 以及 [4, 5, 6]。

4 并非其中任何一個元素,因此不在該嵌套列表中,輸出結果為 False。

B 選項中,[4, 5, 6] 是一個普通的列表,它有三個元素,分別是 4,5,6。

整數(shù) 4 在該列表中,因此輸出結果為 True。

C 選項中,[[4, 5, 6]] 是一個嵌套列表,僅有一個元素 [4, 5, 6]。

因此,整數(shù) 4 不在該嵌套列表中,輸出結果為 False。

運行代碼驗證一下吧:

圖片

圖片

選擇題 4 - 成員運算符

小強下班坐公交回家,他的選擇有三種,

分別是 301、209、355 路公交。

為了讓他能夠準確地坐上公交回家,需要補全下面的代碼塊:

choice = ['301', '209', '355']

bus = input('來了一輛公交,號碼是:')

[條件判斷語句]

print('坐這輛公交回家')

多選題:請你選出合理的條件判斷語句:

A. if bus in choice:

B. if bus == choice:

C. if bus == '301' or bus == '209' or bus == '355':

D. if bus == '301' and bus == '209' and bus == '355':

答案是 A、C

簡單理解一下題意:我們要判斷“來了一輛公交,這輛公交的號碼”是否在列表 ['301', '209', '355'] 中。

很明顯借助成員運算符 in 就可以實現(xiàn),所以我們先把 A 選上。再來看選項 B、C、D。

B 選項中,if bus == choice: 成立的前提是同時看到是三輛公交車,與我們獲取的輸入值(一輛公交)相悖,所以直接舍棄。

C 選項中,if bus == '301' or bus == '209' or bus == '355': 表示來的公交車可以是 301 或者 209 或者 355,只要是其中任何一個,條件都可以成立。這個條件符合我們的需求。

D 選項和 B 選項實現(xiàn)的功能相同,直接舍棄。

代碼題 5 - 索引 & 列表的修改

“貍貓換太子”:請你按照下面的注釋補充代碼。

圖片

我的答案:

圖片

圖片

皇家嬰兒名單是一個嵌套列表,該嵌套列表中的第 3 個元素['三公主', '太子']中的第 2 個元素就是'太子',因此,使用 baby_list[2][1] 即可“找到太子”。

“找到太子”后,使用相同的索引可將元素'太子'換成元素'貍貓'”,實現(xiàn)該列表元素的修改,即 baby_list[2][1] = '貍貓'

實戰(zhàn) 1 - 成員運算符 & 列表

智能簽到系統(tǒng)

【練習介紹【】】

簽到,對于我們來說再平常不過了。無論上班打卡,亦或參加某項活動,都少不了簽到這一環(huán)節(jié)。常見的有人臉識別、指紋識別、填寫姓名等簽到方式。在這里,我們就以填寫姓名這種方式為依據(jù),設計一個簡易的智能簽到系統(tǒng),避免重復簽到。

【題目要求】

通過自主輸入姓名,判斷是否簽到。如果已經(jīng)簽到,提示用戶無需重復簽到;否則,提供是否簽到選項。

詳細的邏輯可以參考下方代碼塊:

輸入姓名

如果已經(jīng)簽到,打印"您已經(jīng)簽到,無需重復簽到單"

否則,詢問"是否新增簽到"

回答"是",則將姓名添加到簽到表,并打印"簽到成功以及簽到名單"

回答"否",則打印"您可以稍后簽到"

給你一點點提示:

1)變量名建議:姓名 —— name;簽到名單 —— attendance_list;回答 —— answer。

我的答案:

圖片

圖片

實戰(zhàn) 2 - 索引

設計搖獎機

【練習介紹】

不知道你有沒有玩過搖獎機,只要搖動搖桿,屏幕中間的三個圖案輪就會飛快轉動。當圖案輪旋轉停止,顯示的三個圖案如果相同,即為中獎。

圖片

在這里,我們做一個簡易的搖獎機。

可以把列表當做“數(shù)字轉盤”,為了降低操作難度,我已經(jīng)為你提供了三個列表。

num_list1 = ['0', '1', '0', '1', '1', '0', '1', '0', '1', '0']

num_list2 = ['0', '1', '1', '1', '0', '0', '1', '0', '0', '1']

num_list3 = ['1', '0', '1', '1', '0', '1', '1', '0', '1', '1']

每個列表包含 10 個亂序的數(shù)字字符串,只有 '0' 和 '1'兩種。

然后,把“輸入一個三位數(shù)”當成“搖獎”這個動作,并把這個三位數(shù)的百位數(shù)、十位數(shù)、個位數(shù)作為索引,分別對列表取值,組成兌獎碼。

以 223 這個三位數(shù)為例,對三個列表分別索引取值,組成的兌獎碼是 011。

【題目要求】

隨機輸入一個三位數(shù)(000 - 999),可以獲得一個專屬的兌獎碼,當兌獎碼為 111 或 000 時,即為中獎,否則,未中獎。

圖片

給你一點點提示:

1)變量名建議:輸入的三位數(shù) —— num,三位數(shù)中的百位數(shù) —— hundreds_digit,三位數(shù)中的十位數(shù) —— tens_digit,三位數(shù)中的個位數(shù) —— ones_digit,兌換碼 —— code。

我的答案:

圖片

圖片

Input 輸入的是字符串,需要用int轉換為整數(shù)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    6711

    瀏覽量

    88299
  • 編程
    +關注

    關注

    88

    文章

    3520

    瀏覽量

    93262
  • 元素
    +關注

    關注

    0

    文章

    47

    瀏覽量

    8395
收藏 人收藏

    評論

    相關推薦

    Python的列表元組兩種數(shù)據(jù)結構區(qū)別差異分析

    前言 相信大家對于Python的列表元組兩種數(shù)據(jù)結構并不陌生了,如果我問大家這兩種數(shù)據(jù)結構有什么區(qū)別呢?列表元組都是數(shù)組,列表是動態(tài)的數(shù)
    發(fā)表于 11-20 15:31 ?2035次閱讀
    Python的<b class='flag-5'>列表</b>和<b class='flag-5'>元組</b>兩種數(shù)據(jù)結構區(qū)別差異分析

    #Python3教程 使用列表元組聚合值

    編程語言python
    電子技術那些事兒
    發(fā)布于 :2022年08月29日 21:27:39

    119. Python列表元組:8.10 列表修改數(shù)據(jù)

    python
    充八萬
    發(fā)布于 :2023年07月05日 16:00:34

    130. Python列表元組:8.21 元組數(shù)據(jù)的修改操作

    python
    充八萬
    發(fā)布于 :2023年07月05日 16:05:13

    131. Python列表元組:8.22 元組的總結

    python
    充八萬
    發(fā)布于 :2023年07月05日 16:06:23

    111. Python列表元組:8.2 下標

    python
    充八萬
    發(fā)布于 :2023年07月07日 07:31:14

    120. Python列表元組:8.11 列表復制數(shù)據(jù)

    python
    充八萬
    發(fā)布于 :2023年07月07日 07:41:43

    126. Python列表元組:8.17 列表總結

    python
    充八萬
    發(fā)布于 :2023年07月07日 07:45:13

    127. Python列表元組:8.18 體驗元組

    python
    充八萬
    發(fā)布于 :2023年07月07日 07:46:23

    130. Python列表元組:8.21 元組數(shù)據(jù)的修改操作

    python
    充八萬
    發(fā)布于 :2023年07月07日 07:49:52

    131. Python列表元組:8.22 元組的總結

    python
    充八萬
    發(fā)布于 :2023年07月07日 07:51:03

    python列表元組、字典的相關定義與操作

    python列表、元組、字典的基本用法
    發(fā)表于 03-21 09:28

    python的列表元組及字典資料集合免費下載

    本文檔的主要內(nèi)容詳細介紹的是python的列表元組及字典資料集合免費下載。
    發(fā)表于 03-16 08:00 ?7次下載

    訪問Python元組中的元素

    元組(Tuple)是 Python 編程語言中的一種數(shù)據(jù)類型。它是一個不可變的序列,其中的元素不能被修改、添加或刪除。元組列表(List)相似,但與列表不同的是,
    的頭像 發(fā)表于 04-17 11:50 ?1636次閱讀

    網(wǎng)絡工程師學Python-for循環(huán)

    在 Python 中,for 循環(huán)是一種常用的結構,用于遍歷序列(如列表、元組、字符串)中的元素。
    的頭像 發(fā)表于 04-19 15:47 ?859次閱讀