日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

清空list_3. Python3轻食丨一个故事看懂List所有用法:1年级1班的班级生活

發布時間:2025/3/21 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清空list_3. Python3轻食丨一个故事看懂List所有用法:1年级1班的班级生活 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

List(列表)知識:1年級1班的班級生活

1.1 列表是個啥:List(列表)的基礎知識:

今天我們來講Python六大數據類型的第一種:List(列表)。本文將引入一個1年級1班的班級故事,本故事將貫穿教程始末,力求讓每一個小知識點第一次出現在你面前時,都是靈活而可愛的。通過本文的學習后,你就能掌握關于List(列表)的所有相關知識了。那,跟著我一起看下好不啦?

A.List是啥?

a. List屬于序列:序列共有 List 、 Turple 、 字符串 、 Unicode字符串 、 buffer對象 和 xrange對象 六種,所有序列都存在內部的索引(將在后文提及)。

b. List屬于標準數據類型:Python標準數據類型共有 Number(數字) 、 String(字符串) 、 List(列表) 、 Turple(元組) 、 Set(集合) 、 Dictionary(字典) 六類。

B.List有啥特征?

我們先來看幾個List(序列)長啥樣:

>>> a = ['Think','123456','[1,2,3]']

觀察可以看到:

a. 序列的基本結構為:變量 = [ ] ,即變量 、= 和 []。b. 序列內的數據類型:不要求一致,可以有多種并存,甚至一個List里面還可以包含其他List。被包含的"子List"此時作為“母List”的元素。c. 序列內的元素:序列內的內容為元素,元素數目可以為0,即空集 a = [] ;元素之間用 , 分隔開;如果元素為字符串,應用 ’ 或者 " 括起來。

C. 序列可以進行的基本操作:最基礎的基本操作一共有五種:索引 、切片、加、乘、 檢查,將在后文中進行詳細解釋。

1.2 可以對列表做啥:List(列表)的操作

a. 創建:1年級1班開學了!

我們假設1年級1班開學了,一共有李布爾、王多魚、蘇大強三名小朋友入學。我們簡稱1年級1班的班名為one,現在我們要打印出這個班級的同學名單:

>>> one = ['李布爾','王多魚','蘇大強'] >>> one ['李布爾', '王多魚', '蘇大強']

用中括號[ ]創建一個列表賦給one。當然班級也可以沒人,比如隔壁1年級2班沒人,list可以是空的:

>>> two = [] >>> two []

b. 計數 :班里有幾個人?


這時候老師想知道1年級1班有幾個人,三個人很容易數出來,可如果想知道全校的人數呢?需要調用 len(班級名) 這個語句來計數列表內的元素長度(數目):
>>> one = ['李布爾','王多魚','蘇大強'] >>> len(one) 3

注意:空list也可以用len,空list長度為0。比如我們看看慘淡的1年級2班:

>>> two = [] >>> len(two) 0

c. 訪問元素:班里都是按學號點名的!

在學校里,每名同學都有自己的學號,這就是列表中的元素索引。

學號的制定規律:

1.在一個有人的班級中,每名同學都有兩個學號(即索引),這個學號是以他們在整個班級中的相對位置確定的。

2.正數第一位學號為0,正數第二位學號為1…倒數第一位學號為-1,倒數第二位學號為-2。即:正數索引為n-1,倒數索引為-n。

比如以1年級1班為例:

>>> one = ['李布爾','王多魚','蘇大強']

王多魚是正數第一位同學、倒數第三位同學。所以他的學號就有0和-3兩個。

當老師想點名的時候,要用班級名[學號]的方式點學號。例如點二號同學:

>>> one = ['李布爾','王多魚','蘇大強'] >>> one[2] '蘇大強'

如果老師想知道某個同學的姓氏怎么辦?對于列表內的元素我們還可以繼續切割:

>>> one = ['李布爾','王多魚','蘇大強'] # 查看 1年級1班 學號為 0 的同學姓名: >>> name = one[0] # 取該姓名索引為0的字符: >>> name [0] '李'

如果老師想叫多位同學,比如想叫從1號開始后面的所有同學呢?

>>> one = ['李布爾','王多魚','蘇大強'] >>> one[1:] ['王多魚', '蘇大強']

我們可以看到,就成功把1號和2號同學叫出來了。這里用的是切片的方式,即班級名[從第幾號學生開始:截止到第幾號學生之前],從第n號開始的全部可以用班級名 [n:],截止到n號之前的全部可以用班級名[:n]。

d. 追加元素 :1年級1班的新生


班里轉來了一名新生,叫史曉明。我們用班級名.append(新同學名字) 的方式將他添到班級名單里,按照先來后到的規則,他自然排在最后:

第一種情況:默認添加新元素到列表末尾

>>> one = ['李布爾','王多魚','蘇大強'] >>> one.append('史曉明') >>> one ['李布爾', '王多魚', '蘇大強', '史曉明']

這時候‘王多魚’ 小朋友家財大氣粗的派來一名隨讀保鏢,強烈要求學號和王多魚挨著。那能不能安排到指定位置呢?當然可以,我們可以使用班級名.insert(保鏢學號,‘保鏢名字’) 的方式將其添加到指定位置:

第二種情況:指定位置插入元素

>>> one = ['李布爾', '王多魚', '蘇大強', '史曉明'] >>> one.insert(2,'錢大彪') >>> one ['李布爾', '王多魚', '錢大彪', '蘇大強', '史曉明']

這時候需要注意,因為‘錢大彪’的加入,導致列表內新元素后面元素的相對位置都發生了一次變化。例如 ‘蘇大強’ 過去學號是 2 和 -2,現在學號則變成了3和 -2。

e.刪除:報告老師,我想退學!

因為剛才 ‘錢大彪’ 的加入,導致 ‘蘇大強’ 和 ‘史曉明’ 的學號都滯后一名。在調和失敗后, ‘史曉明’同學憤而退學,老師只好將其從班級名單中刪掉。在python中,將元素從列表中刪除一共有三種方式:

第一種刪除方式:remove 語句

班主任拿出了班級名單,找到了‘史曉明’ 的名字,然后用 班級名.remove(史曉明的姓名) 的方式將 ‘史曉明’ 在班級名單中刪除了:

>>> one = ['李布爾', '王多魚', '錢大彪', '蘇大強', '史曉明'] >>> one.remove('史曉明') >>> one['李布爾', '王多魚', '錢大彪', '蘇大強']

第二種刪除方式:del 語句

第一種用remove 語句刪除的情況,前提是老師記得 ‘史曉明’ 的名字。但萬一老師不知道這個學生的名字,或者有熊孩子沒事改名字記不住咋辦?沒事,我們還可以用他的學號刪除(索引刪除),方法為:del 班級名[史曉明學號] 。

>>> one = ['李布爾', '王多魚', '錢大彪', '蘇大強', '史曉明'] >>> del one[4] >>> one ['李布爾', '王多魚', '錢大彪', '蘇大強']

第三種刪除方式:pop 語句

我們用學號刪除的時候容易出問題,萬一刪錯了咋辦?我咋知道哪個索引到底還是不是 ‘史曉明’ 的學號?。這時候我們可以用pop 語句,同樣也是用索引刪除,但是pop刪除元素后會給你顯示刪除學號對應的名字。具體方法為: 班級名.pop(史曉明的學號)

>>> one = ['李布爾', '王多魚', '錢大彪', '蘇大強', '史曉明'] >>> one.pop(4) '史曉明' >>> one ['李布爾', '王多魚', '錢大彪', '蘇大強']

我們可以看到執行了班級名.pop(史曉明學號) 后,先給我們返回了一個 ‘史曉明’ 的值,告訴我們剛才刪的是啥。我們在執行一下 one,就會看到班級名單里已經刪除了。

注意:當我們需要刪除列表中的最后一個元素時,可以不寫元素索引。像在剛才的例子中,用 班級名.pop() 即可刪除位于班級名單最后的 ‘史曉明’ 同學:

>>> one = ['李布爾', '王多魚', '錢大彪', '蘇大強', '史曉明'] >>> one.pop() '史曉明' >>> one ['李布爾', '王多魚', '錢大彪', '蘇大強']

講完班級名.remove()、del 班級名[] 和 班級名.pop() 后,不得不將另一種刪除元素的語句。這種語句與上述三種的不同在于,它會刪除元素內所有元素:

第四種刪除方式:list.clear() 語句

這種方式為清空列表內所有元素,將該列表變為空list:

>>> a = ('1','2','3') >>> a.clear() >>> a []

這時候如果我們想再確認一遍 ‘史曉明’ 同學到底還在不在班級名單里,可以使用 in 語句,方法為要檢查的同學名字 in 班級名 :

>>> one = ['李布爾','王多魚','錢大彪','蘇大強'] >>> '史曉明' in oneFalse

返回的結果是 False,就說明史曉明已經不在班級名單中了。同樣我們也可以用要檢查的元素 not in 序列來判斷元素是否不再序列中:

>>> one = ['李布爾','王多魚','錢大彪','蘇大強'] >>> '史曉明' not in one True

這里要注意的是在要檢查的元素 not in 序列 和 要檢查的元素 in 序列 中,in 后面的既可以是 變量 也可以是 序列本身 ,例如:

# 在變量中檢索 >>> one = ['李布爾','王多魚','錢大彪','蘇大強'] >>> '史曉明' in one False # 在序列中檢索>>> one = ['李布爾','王多魚','錢大彪','蘇大強'] >>> '史曉明' in ['李布爾','王多魚','錢大彪','蘇大強'] False

確定將 ‘史曉明’ 從班級中刪除后,班主任想點一遍名。for in 循環語句終于出場了,用法為 for 標識符 in 序列 。執行語句后,Python會將 列表 中每一個 元素賦值給標識符,賦值結束后繼續循環將第二個元素再重新賦值給標識符,直到將列表中所有數據賦過一遍結束。

>>> one = ['李布爾','王多魚','錢大彪','蘇大強'] >>> for i in one: print(i) 李布爾 王多魚 錢大彪 蘇大強

在上述代碼中,即將序列 one 中的每一個元素依次賦給標識符 i,即可理解為依次執行:i1 = ‘李布爾’、i2 = ‘王多魚’、i3 = ‘錢大彪’、i4 = ‘蘇大強’,然后print(i) 即依次打印之前的每一次i值,即依次執行print(i1)、print(i2)、print(i3)和 print(i4)。

**f. 更新與替換:王多魚改名了

換名的情況還是發生了:有一天 ‘王多魚’ 的家長聯系老師,請老師更新一下班級名單,因為王多魚剛剛改名了。老師問為啥?他說覺得 ‘王多魚’ 這個名字太世俗了,要取一個有文化的名字: ‘王有才’ 。

老師雖是無奈,也只好作罷。用 班級名[王多魚的學號] = 王多魚的新名字 的方式將班級名單中,王多魚的姓名記錄更新了,從此以后王多魚叫王有才:

>>> one = ['李布爾', '王多魚', '錢大彪', '蘇大強'] >>> one[1] = '王有才' >>> one ['李布爾', '王有才', '錢大彪', '蘇大強']

**g.合并班級

后來教務處做出一個決定,將1年級3班并入1年級1班。忙碌的班主任又要開始重新合并班級名單,我們先來看一下1年級3班的新同學們:

>>> three = ['楊九年','周媛','錢大彪','鄭仕']

(好像有個哥們重名了??我們一會再說)

班主任這時調用了 extend 語句合并兩個班的學生,方法為 1班名字.extend(3班名字)

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強'] >>> three = ['楊九年','周媛','錢大彪','鄭仕'] >>> one.extend(three) >>> one ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕']

還是按照先來后到的道理:extend里新加入列表內的所有元素,都默認添加到了源列表的末尾。

初次之外還可以用 列表直接相加 的方式,例如:

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強'] >>> three = ['楊九年','周媛','錢大彪','鄭仕'] >>> one = one + three >>> one ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕']

說到列表之間相互相加,我們再順便談談列表的乘法。一個列表可以直接乘以一個數字,我們可以看看會得到什么樣的結果:

>>> a = ['think','pad'] >>> a * 3 ['think', 'pad', 'think', 'pad', 'think', 'pad']

我們發現:將列表乘以一個整數后,Python會將列表內所有元素按順序重復輸出相應的次數。

另外我們發現,1年級1班和1年級3班都有1名叫 ‘錢大彪’ 的同學,但是都不受影響的就放到了同一個列表中。我們可得知:列表中的元素是可重復的。

如果有重復,我們咋知道重復了幾次呢?這時候我們可以用 ‘count’ 語句,用法為 班級名.count(像檢查重復數的對象) :

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕'] >>> one.count('錢大彪') 2

我們就知道,班里現在有兩個 ‘錢大彪’ 的人了,我們可以按照學號次序管他們叫 ‘大錢大彪’ 和 ‘小錢大彪’,我們想查 ‘大錢大彪’ 的學號時,可以用 班級名.index(搜索條件) 的方式檢索第一個匹配搜索的同學的學號(序列):

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕'] >>> one.index('錢大彪') 2

這時候我們就可以快速知道,‘大錢大彪’ 的學號是 2 了。

**h. 排序與嵌套:1年級1班要分組了

為了班級合并后的有序管理,教務處給了1年級1班的班主任一個這樣的任務:

要選出一名班長。
班長以外的七名同學分成兩組,每組一名隊長三名隊員。
以學籍號正序為準,前三位分別為:班長、兩名隊員。
將班長名單、隊長名單、隊員名單提交至教務處,收到回復。

第一步:選出學籍號排名第一的同學為班長

一開始我們說每個都學都有自己的學號(索引),但是這容易出現這樣一個問題:
在1年級1班里,學號為 0 的是 ‘李布爾’ 小朋友,但 ‘楊九年’ 小朋友在3年級1班的時候學號也是 0 。為了避免這種重新排序,我們要了解 學籍號 (id)這個概念,每個小朋友都有自己獨一無二id,我們可以用 id(查看id的對象) 這個語句來查看:

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕'] >>> id('蘇大強') 2078505060944 >>> id('周媛') 2078503793656

首先要按照學籍號選出班長來。班主任在這時候調用了 min 語句,使用方法為 min(班級名):

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕'] >>> min(one) '周媛'

這時,姓名首字母排名最小的 ‘周媛’ 同學成為了班長。

順便一提:我們看到 min 語句自然而然就能想到 max 語句,使用方法為 max() 語句。

max 和 min 語句其實可以設定排序條件的,方法為 min(班級名,key=排序方式) ,比如我們想看看1年級1班中誰名字最短,就可以用 len 即長度來作為判斷標準 min(班級名,key=len) :

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕'] >>> min(one,key=len) '周媛'

我們會發現在班里 ‘周媛’ 和 ‘鄭仕’ 都是兩個字,但是執行后卻給了我們 ‘周媛’ 的名字,原因是: min 或者 max 語句默認將符合條件的第一個作為結果返回。

第二步:按學籍號排名先后分出隊長和隊員

要分出隊長和隊員,首先我們要知道1年級1班同學們學籍號由小到大的排序吧,班主任用了 sort 語句給班內人排序,使用方法為 班級名.sort() :

>>> one = ['李布爾', '王有才', '錢大彪', '蘇大強', '楊九年', '周媛', '錢大彪', '鄭仕'] >>> one.sort() >>> one ['周媛', '李布爾', '楊九年', '王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']

現在就一目了然了: 次序第一位的‘周媛’為班長、次序第二、三位的 ‘李布爾’ 、 ‘楊九年’為隊長, 其余五人各為兩組隊員。

注意:在sort() 函數中會默認地按升序排列

說到用 sort() 語句可以將一個列表正向排列,就不得不提到可以將列表倒敘排列的 reverse 語句:

>>> one = ['周媛', '李布爾', '楊九年', '王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪'] >>> one.reverse() >>> one ['錢大彪', '錢大彪', '鄭仕', '蘇大強', '王有才', '楊九年', '李布爾', '周媛']

這時候老師可以創建班長、隊長、隊員的三個名單了:

>>> monitor = ['周媛'] >>> captain = ['李布爾','楊九年' ] >>> member = [ '王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']

但是這樣分三行顯示好像不太方便,機智的班主任使用了將 monitor 、 captain 和 member 合并給了一個新的班級名單:

>>> monitor = '周媛' >>> captain = ['李布爾','楊九年' ] >>> member = [ '王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪'] >>> one = [monitor, captain, member] >>> one ['周媛', ['李布爾', '楊九年'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']]

班主任完成了1年級1班開學以來的第一個重要任務,心滿意足的給教務處交了差。

通過上述我們可以觀察得知:list(列表)內還可以嵌套其他列表,但其他“列表”被嵌套進來后就已經成為了元素,我們可以檢驗一下:

>>> one = ['周媛', ['李布爾', '楊九年'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']] >>> len(one) 3

此時再用 len(班級名) 檢驗發現,one 下只有三個元素。

**i. 復制:教務主任想把這次的名單備個份

教務主任想把這次1年級1班提交的班級名單拷貝一份,留在他的備份 Beifen 里,開始糾結起來了:列表(list)的備份方式有直接賦值 、淺拷貝 和 深拷貝三種,這種情況下用哪種好呢?都試試吧!

**第一種拷貝:直接賦值

一開始教務主任想偷偷懶,直接把1年級1班提交的 one 列表賦值給我的備份文件 Beifen 不就好了 :

>>> one = ['周媛', ['李布爾', '楊九年'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']] >>> Beifei = one >>> Beifei ['周媛', ['李布爾', '楊九年'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']]

完美!可是直到有一天,教導主任發現他辦公室里的那份 Beifen 文件里,怎么‘楊九天’ 自己變成了 ‘楊浩天’ ?他去問1年級1班的班主任,班主任告訴他:

楊九天改名了,我就把我手里的班級名單改了,怎么,您那兒的列表也變了?

是的,也改變了:

>>> captain[1] = '楊浩天' >>> one [['周媛'], ['李布爾', '楊浩天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']] >>> Beifei [['周媛'], ['李布爾', '楊浩天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']]

教務主任想:這不靠譜啊,這樣我辦公室文件就可以讓提交人隨便改了!

于是教導主任只能開始嘗試第二種:

**第二種拷貝:淺拷貝

淺拷貝的使用方式主要有 拷貝到的地方 = 源列表.copy() 、 拷貝到的地方 = 源列表[:] 、 拷貝到的地方 = list(源列表) 效果相同的三種,教導主任就以第一種為例試一下:

>>> Beifei = one.copy() >>> Beifei [['周媛'], ['李布爾', '楊九天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']]

好像看起來又成功了,但教導主任不死心。讓班主任再改一下他手里的班級文件,看看自己這里會不會變:

>>> captain[1] = '楊浩天' >>> one [['周媛'], ['李布爾', '楊浩天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']] >>> Beifei[['周媛'], ['李布爾', '楊浩天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']]

還是會變! 教導主任又放棄了第二種拷貝方式,將希望放在了最后一種上:

**第三種拷貝:深拷貝

深拷貝和剛才兩種都不一樣,使用深拷貝前需要先用 import 語句將 copy 調用出來,方法為 import copy。調用后,深拷貝的使用方法為 拷貝到的地方 = copy.deepcopy(源列表):

>>> import copy >>> Beifei = copy.deepcopy(one) >>> Beifei [['周媛'], ['李布爾', '楊九天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']]

失敗了兩次的教務主任這時候已經不信結果了,執意要班主任再在他那改一次名字:

>>> captain[1]= '楊浩天' >>> one [['周媛'], ['李布爾', '楊浩天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']] >>> Beifei [['周媛'], ['李布爾', '楊九天'], ['王有才', '蘇大強', '鄭仕', '錢大彪', '錢大彪']]

成功了!這時候我們就明白了:在深拷貝中,當改變原序列中二層以及二層以下的內容時,拷貝后的內容不會受到任何影響。而直接賦值和淺拷貝的方式會受影響。

啥叫二層?

#這叫只有一層: first = [] #這叫二層,存在列表嵌套: second = [[],[]]

到這里,我們關于list(列表)的敘述就告一段落。

總結

以上是生活随笔為你收集整理的清空list_3. Python3轻食丨一个故事看懂List所有用法:1年级1班的班级生活的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。