tft每日頭條

 > 生活

 > python自學日記第四章

python自學日記第四章

生活 更新时间:2024-07-29 16:25:53

列表

在實際場景中,除了之前使用過的整型,浮點型,字符串,布爾類型外,用的最多的就是列表和元組

1.列表數據類型

列表的結構:左中括号 表項 右中括号,表項是由逗号隔開,一個列表裡的表項值的數據類型可以不一樣

python自學日記第四章(python自學篇第四章列表)1

spam仍然隻被賦予了一個值,叫列表值,隻是這個列表值裡本身包含多個值或者元素,[]空列表,不包含任何值,類似于空字符串

1.1 用下标取值

python自學日記第四章(python自學篇第四章列表)2

結果:列表下标是從0開始的,并且下标隻能是整型,不能是浮點型

python自學日記第四章(python自學篇第四章列表)3

注意:如果下标>=列表值的個數,就會報列表數組越界

python自學日記第四章(python自學篇第四章列表)4

列表裡面可以包含多種數據類型,在有些時候,列表裡面還能包含列表,可以叫做多維列表

python自學日記第四章(python自學篇第四章列表)5

結果:

python自學日記第四章(python自學篇第四章列表)6

解析:當遇到比較複雜,或者層次結構比較多的列表數據時,最好的方法就是順序取值,一般列表結構有幾層,就需要幾個下标去取值,比如要取子列表[8,9]裡的值,按順序數下來是三層結構,就需要三層下标

第一層:在第二列,下标就是1

第二層:在第二列,下标還是1

第三層:按序取值

最後結果就是spam[1][1][0] 和 spam[1][1][1]

1.2 負數下标

正常情況下,取值都是從頭開始取,但是有時候我們不清楚列表的長度,但是要取出列表最後一個列表項的值,這時候可以使用負數下标

python自學日記第四章(python自學篇第四章列表)7

結果:輸出7 和 6

解析:之前說過,列表的下标從頭開始分别是0,1,2,3,.....,那麼從最後開始就是-1,-2,

-3,...

這個記住規則就行

1.3 利用切片取得子列表數據

通過下标我們隻能取得單個數據,利用切片可以去除一組列表數據

下标和切片的區别:

python自學日記第四章(python自學篇第四章列表)8

python自學日記第四章(python自學篇第四章列表)9

結果:

python自學日記第四章(python自學篇第四章列表)10

解析:正常理解是從第一個下标1,對應的值就是2,最後到下标4,對應的值是5,返回的結果應該是[2,3,4,5],但是實際上,結束的下标不包括該值,通用理解可以記住左閉右開的規則,最後生成的結果仍然是一個列表

快捷寫法:

spam[1:]:表示從下标1開始,到列表的最後

spam[:5]:表示從下标0開始,到下表5結束(但不包括5)

spam[:]:表示從下标0開始到列表最後結束

1.4 獲取列表的長度

使用内建函數len()

python自學日記第四章(python自學篇第四章列表)11

1.5 使用下标改變列表值

python自學日記第四章(python自學篇第四章列表)12

結果:spam列表第一個列表項重新賦值後輸出

python自學日記第四章(python自學篇第四章列表)13

1.6 列表連接和列表複制

列表的連接和複制類似字符串, 号可以拼接兩個列表,*可以操作一個列表和一個整數,實現列表的複制

python自學日記第四章(python自學篇第四章列表)14

結果:

python自學日記第四章(python自學篇第四章列表)15

1.7 删除列表值

通過列表下标删除列表值

python自學日記第四章(python自學篇第四章列表)16

結果:[1, 3, 4, 5]

2.使用列表

記錄新員工的工号

python自學日記第四章(python自學篇第四章列表)17

結果:

python自學日記第四章(python自學篇第四章列表)18

2.1 列表用于循環

通過for和while循環都可以打印列表數據

python自學日記第四章(python自學篇第四章列表)19

結果:兩種循環都可以打印出1,2,3,4,5,6,但是在這種情況下,使用for循環更方便

一個比較常見的技巧:在for循環中使用range(len(spam)),疊代列表的每一個下标

python自學日記第四章(python自學篇第四章列表)20

結果:

python自學日記第四章(python自學篇第四章列表)21

在使用中,range(len(spam))很實用,它可以循環訪問所有的下标以及對應的值

2.2 in 和 not in 操作符

in 和 not in可以确認一個值是否在列表中或者字符串中

python自學日記第四章(python自學篇第四章列表)22

in 和 not in在實際業務判斷上會使用很頻繁

2.3 多重賦值技巧

如果想把一個列表中的所有數據分别賦值給多個變量,可以使用這個技巧

python自學日記第四章(python自學篇第四章列表)23

結果:cat,dog,fish,但是這種技巧需要明确列表項的個數,而且變量和列表項的個數要相等,否則報錯

3.增強的賦值操作

有時候,我們會對變量本身操作,比如循環的時候,要記錄循環的次數,要對num= num 1操作,但是,有一種快捷方式:num =1 和num = num 1的效果一樣

增強賦值操作符簡表:

python自學日記第四章(python自學篇第四章列表)24

4.這對列表使用的方法(函數)

4.1 index()方法在列表中查找值的下标

python自學日記第四章(python自學篇第四章列表)25

結果:1和4 ,注意的是如果列表中有相同的元素,隻會返回出現的第一個元素的下标

4.2 用append()和insert()方法在列表中添加值

append()方法是在列表結尾處添加元素,insert方法是可以在列表的任何位置添加元素,因為是根據下标添加,另外,不同于index()方法,append()和insert()方法隻針對列表操作,不可以對其他數據類型操作,否則報錯

python自學日記第四章(python自學篇第四章列表)26

結果:

python自學日記第四章(python自學篇第四章列表)27

解析:append是在原animal列表的末尾添加了元素dog,随後,又在下标1處插入了元素fish

4.3 remove()方法在列表中删除值

在前面已經使用過del語句删除值,del是在知道要删除列表項的下标的情況下使用,而remove()方法是在知道列表項的值的情況下做删除操作

python自學日記第四章(python自學篇第四章列表)28

結果:

python自學日記第四章(python自學篇第四章列表)29

解析:如果一個列表中出現多個相同的值,remove隻會删除第一個

4.4 用sort()方法将列表中的值進行排序

在很多情況下,需要對列表中的值進行排序,特别是時間或者數字類的列表

python自學日記第四章(python自學篇第四章列表)30

結果:

python自學日記第四章(python自學篇第四章列表)31

解析:正常sort()是正序排序,加上reverse=True後為倒序排序,排序的列表裡,元素不能既是數字類型又是字符串類型的,sort()方法默認是ASCII碼進行排序的,如果想使用字典順序排序,需要添加參數key=str.lower

5.類似列表的類型:字符串和元組

字符串在結構上類似列表,可以把字符串裡的每個字符當作是列表項,比如:按下标取值,切片,for循環取值,len(),index(),in 和 not in都可以應用于字符串。

5.1 可變和不可變數據類型

之前的例子中我們已經試過,列表裡的列表項的值可以被替換,但是字符串裡的部分字符不能被替換,隻能全部重新覆蓋。

5.2 元組數據類型

元組數據與列表數據的區别:

(1):列表數據以中括号開始和結尾,元組數據是以小括号開始和結尾

(2):列表的數據可以被修改,增加和删除,而元組數據是不可變的

如果一個元組中隻有一個元素,python就會默認該數據是一個字符串,如果确認是元組類型,需要在後面加一個逗号

python自學日記第四章(python自學篇第四章列表)32

結果:type()函數用來說明數據類型,如果隻有一個元素,後面沒有加逗号,python就認為隻是在一個普通的括号内輸入了一個值

python自學日記第四章(python自學篇第四章列表)33

如果在特定情況下不想改變數據,就可以使用元組

5.3 用list()和tuple進行數據類型轉換

在前面的章節中,我們通過str(),float(),int()函數對數據類型進行強制轉換,列表和元組的數據結構相似,也可以進行相互轉化。

python自學日記第四章(python自學篇第四章列表)34

結果:

python自學日記第四章(python自學篇第四章列表)35

6.引用

6.1 傳遞引用

引用是一個比較重要的概念,一不小心,可能就會出bug

先看一個例子

python自學日記第四章(python自學篇第四章列表)36

結果:

python自學日記第四章(python自學篇第四章列表)37

解析:在字符串和數值型的引用傳遞中,變量保存的是值的 本身,spam一開始存儲值100,便且把100傳遞給了spam1,後來spam重新賦值為101,但是spam1仍然保存的是100這個值,所以沒有變

然而在列表中,情況似乎有些變化

python自學日記第四章(python自學篇第四章列表)38

結果:

python自學日記第四章(python自學篇第四章列表)39

解析:在列表中,變量存儲的不是數據的本身,而是列表的引用,也可以理解為指向數據的标記,當spam1=spam時,spam1同樣取到了spam的引用(标記),當spam1改變下标為2的數據時,spam1根據這個标記找到了對應的數據,改變了數據的值,所以最後spam和spam1的值都發生了改變。所以,列表間的傳遞時引用(标記)的傳遞,無論傳遞多少次,永遠都指向同一份數據

結論:對于可變數據類型(包括列表和字典(字典下一章講述)),變量存儲的時引用(标記),對于不可變數據(包括字符串,數值型,元組),變量保存的時值

6.2 copy模塊的copy()和deepcopy()函數

在有些場景下,我們不希望另一個變量裡的列表數據發生變化,這時候就用到了copy()和deepcopy()函數 。

python自學日記第四章(python自學篇第四章列表)40

結果:

python自學日記第四章(python自學篇第四章列表)41

解析:在這種情況下,spam1不是隻拿到了這份數據的引用,而是重新複制了一份數據,引用了這份新的數據,所以無論spam怎麼變,都不影響spam1的結果

另外:如果是多維列表,就是用deepcopy()函數

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved