Python基礎-列表

什麼是列表?

列表是由一系列按照特定順序排列的元素組成,直觀理解就是:數組。 只不過python的列表有點特別,他不限制存儲的元素類型,使用手感上來說反倒更像是對標Java中的ArrayList。

 

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers)

列印結果:
[‘Rose’, ‘Lily’, ‘Jasmine’, ‘Rosemary’]

 

創建空列表:

flowers = []

 

訪問元素

訪問列表中的元素,都是用索引來訪問,從0開始遞增。

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[0])

列印結果:
Rose

 

如果我要取最後一個元素呢?

其他程式語言的做法都是先取列表的總長度,然後總長度-1得到最後一個元素的索引。

在python里可以用-1來表示最後一個元素的索引:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[-1])

列印結果:
Rosemary

 

取倒數第二個元素:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[-2])

列印結果:
Jasmine

 

請注意:如果列表為空,那麼訪問最後一個元素會出錯,同樣的如果列表只有一個元素,訪問倒數第二個元素也會出錯。

 

字元串與列表

字元串是不是列表?

字元串就是由字元組成的序列,在某個視角上來看,字元串屬於是一種特殊的列表,但是它不等於列表,只是python這門語言提供了一些獨有的特性,使得我們可以用列表的操作方式來操作字元串。

word = 'abcdefg'
print(word[0])

列印結果:
a

 

字元串與列表的轉換

字元串雖然可以看成列表,但是它與列表的數據類型,應用場景,表現方式都完全不同,所以有些時候我們需要類型轉換。

 

字元串轉列表:

word = 'abcdefg'
print(word)
print(list(word))

列印結果:
abcdefg
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]

 

列錶轉字元串:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers)
print(''.join(flowers))

列印結果:
[‘Rose’, ‘Lily’, ‘Jasmine’, ‘Rosemary’]
RoseLilyJasmineRosemary

 

基礎操作

在列表末尾添加元素 insert()

word = []
word.append('a')
word.append('b')
word.append(2)
word.append('c')
print(word)

列印結果:
[‘a’, ‘b’, 2, ‘c’]

 

請注意:很多操作方法是直接改變列表本身,方法本身不會有返回值,需要仔細留意。

 

在列表中插入元素 insert()

word = ['a','b','c','d']
word.insert(1,'xxx')
print(word)

列印結果:
[‘a’, ‘xxx’, ‘b’, ‘c’, ‘d’]

 

刪除列表元素 del

word = ['a','b','c','d']
del word[1]
print(word)

列印結果:
[‘a’, ‘c’, ‘d’]

 

彈出列表元素 pop()

pop是棧的標準操作,在這裡python提供了這一方法,可以彈出列表中的元素,彈出來的元素可以用變數接收,進一步供業務邏輯使用,而原列表的改變與del刪除元素相同,默認每次彈出列表末尾的元素。

word = ['a','b','c','d']
s = word.pop()
print(word)
print(s)

列印結果:
[‘a’, ‘b’, ‘c’]
d

 

你也可以彈出任意位置的元素

word = ['a','b','c','d']
s = word.pop(0)
print(word)
print(s)

列印結果:
[‘b’, ‘c’, ‘d’]
a

 

python沒有提供push方法,但是我們不管是需要先進先出還是先進後出的數據結構,都可以用 insert + append + pop 三個方法進行組合完成。

 

根據值刪除元素 remove()

如果你知道要刪除的值,但是不知道他的下標,那麼可以使用remove方法進行刪除

word = ['a','b','b','c','d']
word.remove('b')
print(word)

列印結果:
[‘a’, ‘b’, ‘c’, ‘d’]

 

如你所見,remove只能刪除第一個值,如果你要刪除的值可能在列表中出現多次,那麼只能遍歷處理。

 

獲取列表長度 len()

word = ['a','b','c']
print(len(word))

列印結果:
3

 

元素在列表中出現的次數 count()

word = ['a','b','b','c','d']
i = word.count('b')
print(i)

列印結果:
2

 

合併列表 extend()

word = ['a','b','b','c','d']
num = [2,3,4]
word.extend(num)
print(word)

列印結果:
[‘a’, ‘b’, ‘b’, ‘c’, ‘d’, 2, 3, 4]

 

實際上你也可以直接用加號 將兩個列表相加

word = ['a','b','b','c','d']
num = [2,3,4]
all = word + num
print(all)

列印結果:
[‘a’, ‘b’, ‘b’, ‘c’, ‘d’, 2, 3, 4]

 

不同之處是 一個是在原列表上做擴充,一個是新建一個列表進行裝載。

 

組織列表

永久性排序 sort()

正序:

word = ['e','b','a','c','d']
word.sort()
print(word)

列印結果:
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

 

倒序:

word = ['e','b','a','c','d']
word.sort(reverse=True)
print(word)

列印結果:
[‘e’, ‘d’, ‘c’, ‘b’, ‘a’]

 

臨時性排序 sorted()

臨時性排序不會改變原來的列表,而是sorted方法會返回一個排序後的結果列表。

word = ['e','b','a','c','d']
print(sorted(word))

列印結果:
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

 

同樣的  倒序也是加上reverse參數:

word = ['e','b','a','c','d']
print(sorted(word,reverse=True))

列印結果:
[‘e’, ‘d’, ‘c’, ‘b’, ‘a’]

 

實際上sorted可以傳入任何序列,但它總是返回一個列表.

如下演示將一個字元串進行排序

word = 'ebdcgaf'
lis = sorted(word)
print(lis)
print(''.join(lis))

列印結果:
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]
abcdefg

 

反轉列表 reverse()

反轉列表與排序無關,僅僅是將列表元素反向排列。

word = ['e','b','a','c','d']
word.reverse()

列印結果:
[‘d’, ‘c’, ‘a’, ‘b’, ‘e’]

 

那如果想要恢複列表怎麼辦呢? 那就把反轉之後的列表再反轉,也就恢復了。

 

遍歷列表

python中遍歷的寫法是for xx in list,末尾跟個冒號,第二行開始縮進,進入循環之中。

word = ['a','b','c']
for name in word:
    print('這個單詞是:' + name)

列印結果:
這個單詞是:a
這個單詞是:b
這個單詞是:c

 

for循環中的程式碼一律縮進,如果某一行沒縮進,就代表出了循環了。

word = ['a','b','c']
for name in word:
    print('這個單詞是:' + name)
print('已經循環完了哦')

列印結果:
這個單詞是:a
這個單詞是:b
這個單詞是:c
已經循環完了哦

 

數字列表

快速生成 range()

你可以直接列印出一堆臨時生成的數字,range方法的參數為起止數字,但是不包含結束數字。

for num in range(1,5):
    print(num)

列印結果:
1
2
3
4

 

range方法的結果並不是一個直接可用的數字列表,如果要轉成列表,可以使用list方法將它轉化一下。

 

nums = list(range(1,5))
print(nums)

列印結果:
[1, 2, 3, 4]

 

range還有第三個參數,可以指定步長

nums = list(range(1,11,2))
print(nums)

列印結果:
[1, 3, 5, 7, 9]

 

列表統計 min、max、sum

統計列表中的最小值、最大值、值總和

nums = [1,2,3,4,5]
print(min(nums))
print(max(nums))
print(sum(nums))

列印結果:
1
5
15

 

列表解析

以下程式碼為1-10這10個數字,按2步長取值,也就是1,3,5,7,9這五個數,每個數的平方組成一個列表

nums = []
for value in range(1,11,2):
    nums.append(value**2)
print(nums)

列印結果:
[1, 9, 25, 49, 81]

 

下面用列表解析的特性來進行改寫

nums = [value**2 for value in range(1,11,2)]
print(nums)

 

雖然說列表解析的寫法對初學者來說不易閱讀,但是由於程式碼量少,在老手眼裡反倒覺得這種寫法簡單直接,所以閱讀到別人寫的程式碼的時候,有時候會看到這種寫法。

 

切片

切左切右切中間

除了使用索引來訪問單個元素之外,還可以使用切片來訪問指定範圍內的元素

 

訪問第2,3,4三個元素:

word = ['a','b','c','d','e','f']
print(word[1:4])

列印結果:
[‘b’, ‘c’, ‘d’]

 

冒號前為開始切的索引,冒號後為結束的索引,但是不包含這個結束位置的元素。

 

如果你沒有指定開始索引,那麼切片將從0開始

列印前3個元素:

word = ['a','b','c','d','e','f']
print(word[:3])

列印結果:
[‘a’, ‘b’, ‘c’]

 

同樣的如果沒有指定結束索引,那麼切片將切到列表最後

列印第4個元素到最後:

word = ['a','b','c','d','e','f']
print(word[3:])

列印結果:
[‘d’, ‘e’, ‘f’]

 

也可以使用負數

列印最後三個元素

word = ['a','b','c','d','e','f']
print(word[-3:])

列印結果:
[‘d’, ‘e’, ‘f’]

 

猜一猜:如果-3改成-13,結果會如何呢?

 

切整個列表

切整個列表實際上得到的內容就是列表本身,一般是複製列表的時候會這麼做。

word = ['a','b','c','d','e','f']
word2 = word[:]
print(word2)

列印結果:
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]

 

帶著步長切

切片默認的步長為1,所以切片範圍是包含了所有元素,然而我們可以顯示的指定步長。

從3到15,每3個元素切一個:

nums = list(range(0,20))
print(nums[3:16:3])

列印結果:
[3, 6, 9, 12, 15]

 

切全部,每2個切一個元素:

word = ['a','b','c','d','e','f']
print(word[::2])

列印結果:
[‘a’, ‘c’, ‘e’]

 

切全部,每2個切一個元素,倒著切:

word = ['a','b','c','d','e','f']
print(word[::-2])

列印結果:
[‘f’, ‘d’, ‘b’]

 

步長可以為負數,但是不能為0,步長為0就沒法移動了。

 

列表運算

加法

兩列表相加,其實就是兩列表拼接,在上文講合併列表的時候已經有提過。

list1 = ['a','b','c']
list2 = ['d','e','f']
print(list1 + list2)

列印結果:
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]

 

兩列表相加等於兩列表拼接,兩字元串相加等於兩字元串拼接,但是字元串是不能和列表相加的。

 

乘法

將列表與一個整數x相乘,將返回一個原列表重複x次的新列表(如果x=0,那麼將返回空列表)。

list1 = ['a','b','c']
print(list1 * 3)

列印結果:
[‘a’, ‘b’, ‘c’, ‘a’, ‘b’, ‘c’, ‘a’, ‘b’, ‘c’]

 

字元串也可以這麼玩:

name = 'abc'
print(name * 3)

列印結果:
abcabcabc

 

成員資格

檢查一個值是否包含在列表中,可以使用運算符in,這是一個布爾運算符。

words = ['a','b','c','d']
if('c' in words):
    print('包含c')

列印結果:
包含c

 

如果要檢查沒有包含在列表中呢?用not來判斷:

words = ['a','b','c','d']
if(not 'xxx' in words):
    print('這個xxx是沒有的')

列印結果:
這個xxx是沒有的

 

我們不僅可以檢查列表,還可以檢查字元串中是否包含某個字元串

words = 'abcdefg'
if('bc' in words):
    print('這個字元串包含了bc')

列印結果:
這個字元串包含了bc

 

結語

本文涵蓋了python列表的大部分常用知識點,還有一些其他操作比如clear(),copy(),index()等並未加以列出,因為抄文檔就沒有意思了,感興趣的朋友可以自行拓展。

 

Tags: