1. 程式人生 > >python程式設計入門之四:列表和元組

python程式設計入門之四:列表和元組

第四章 列表和元組

4.1 建立一個列表

我們之前學過c語言的同學都知道一個數據型別叫做陣列,但是陣列有一個硬性的要求,就是陣列內的資料型別必須一致,但由於python沒有資料型別,所以python便加入了一個強大的列表,並且幾乎可以向裡注入任何型別的元素。 列表的建立其實很簡單,只需要定義一個列表變數然後將任何資料通過 "[ ] "的形式括起來賦給變數就可以了,像這樣。

# 這個列表內只有數字
list1 = [1, 2, 3, 4, 5]
# 但這個列表內有多種型別,有數字,字串,甚至還可以是一個列表
list2 = [1, 2, 3, "Hopes", [1, 2, 3]]
# 當然,也可以先建一個空列表,以便以後對它進行操作
empty = []

將這段程式碼錄入到pycharm,然後執行一下試試。

4.2 列表中新增元素

列表是可操作的,並且操作起來十分靈活,並且在以後的學習中列表也是不可或缺的部分,列表常用的操作包括:元素的新增,刪除,獲取,修改,查詢。。。並且列表還有很多的BIF也就是方法,下面我們一一介紹. 如果我們想要向列表中新增一個元素,我們就會用到一個BIF----append()方法

# 首先定義一個列表,並賦初始元素值
number = [1, 2, 3, 4]
# 用append方法向其新增元素
number.append(5)
# 列印輸出
print(number)

結果:

[1, 2, 3, 4, 5]

我們之前講到過一個叫做BIF的東西,我們說過它是python的內建方法,可以直接呼叫,在這裡我們可以看出,方法可以直接通過 " .BIF

() "的方式呼叫。但是我們會發現,並不能通過append方法同時新增多個元素,不妨試一下如果加入多個元素會不會出錯:

number = [1, 2, 3, 4]
number.append(5, 6)

試過了沒有?是不是報錯了這樣的內容:

TypeError: appen() takes exactly one argument( 2 given)

意思是append方法只能傳入一個值,而這裡傳入了兩個,所以肯定會報錯。 那我們如果想要一次性加入多個元素呢?當然是有辦法的,這裡我們就用到了一個extend方法,extend即為拓展的意思,不同於append新增,它可以將一個列表拓展進另一個列表,什麼意思呢?看下面的程式碼:

number = [1, 2, 3, 4]
number.extend([5, 6, 7])
print(number)

執行一下,結果:

[1 ,2 , 3, 4, 5, 6, 7]

是不是將列表[5, 6, 7]拓展進了列表[1, 2, 3, 4]中,但是一定要記住,extend內只能是一個列表,而不能是單獨的元素,否則也會報錯。

number.extend(5, 6, 7)   # 錯誤
number.extend([5, 6, 7])   # 正確

但是這兩個新增都存在一個問題:我們只能向整個列表的後面新增,但是如果我想向某個位置插入一個元素該怎麼辦?這裡我們再介紹一個向列表中插入元素的方法:insert方法。

number = [1, 2, 4, 5, 6]
number.insert(3, 2)
print(number)

結果:

[1, 2, 3, 4, 5, 6]

是不是將3插入到第2個元素的位置了呢?你如果問:第二個?我數著是第三個啊?。。。那你可就要注意了,所以有的機器語言中,都是從0開始數的,再數一遍,是不是第二個了?所以,insert()中可傳入兩個引數,insert(3, 2) .3代表要插入的元素,2代表要插入的位置,是不是很簡單,還是錄入程式碼嘗試一下吧。

4.3 元素的獲取

在python列表中的每個元素,都有著屬於自己的索引值,這個索引值就相當於每個班級學生的序號,相互之間一一對應,那麼所以說,我們就可以通過索引的方式來獲取我們需要的某個位置上的元素,如下:

# 定義一個列表,裡面放著四個同學的名字
name = ["Hopes", "Alex", "Demo", "Harry"]

# 我們想要序號為1的同學的名字
stu1 = name[1]
print(stu1)

# 接著是序號為3的同學的名字
stu3 = name[3]
print(stu3)

結果:

Alex
Harry

是不是很easy,只需要在列表變數名後的" [ ] "內輸入你想提取出來的元素的序號,就可以獲取相應的元素。 但是有同學會問,如果我知道序號想提取序號對應的元素可以用這種方式,那麼如果我知道某個元素的內容,是不是也可以得到它的位置呢?答案是肯定的,python是不會放過任何的細節的,接下來我們瞭解一下是怎樣獲取索引值的。

4.5 元素的索引值

如果我們想要得到某個元素的索引值,或者說是它的位置,我們就需要用到另一個BIF,即index方法,index本身就就是索引的意思,所以這裡理所當然的也由它承擔這份責任,我們來看一下是怎樣使用的吧。

# 同樣定義一個包含四個名字的列表
name = ["Hopes", "Alex", "Demo", "Harry"]

# 獲取"Hopes"同學的位置
loc1 = name.index("Hopes")
print(loc1)

# 獲取"Demo"同學的位置
loc2 = name.index("Demo")
print(loc2)

結果:

0
2

怎麼樣,很簡單吧,錄入一下程式碼試試吧。

4.4 元素的替換

既然我們已經學會了元素的獲取,那麼理解元素的替換並不難,因為如果我們要替換某個元素,就必須先獲取到它,所以元素的替換其實也相當於一個元素的重新“賦值”,看看下面的例子吧。

name = ["Hopes", "Alex", "Demo", "Harry"]

# 我們將Alex同學替換成Faker同學
name[1] = "Faker"

# 然後將Harry同學替換成Uzi同學
name[3] = Uzi

# 列印輸出
print(name)

結果:

["Hopes", "Faker", "Demo", "Uzi"]

同樣錄入試一下,學習任何一門程式語言都需要不斷地去嘗試去修改,只要堅持不懈,終有一天可以成為python程式設計的大牛。

4.6 元素的刪除

我們已經學習了元素的新增,獲取,修改,最後我們學習一下關於元素的刪除,同樣我們介紹常見的刪除元素的三種方法----remove(),del和pop()。 比如我們先學習使用remove方式刪除元素:

# 建立一個動物列表
animal = ["mokey", "elephent", "tiger", "snake"]

# 刪除列表中的tiger
animal.remove("tiger")
print(animal)

結果:

["mokey", "elepent", "snake"]

可以看到,tiger確實是被刪除了,利用remove方式並不需要知道某個元素的具體位置,只要知道元素的內容就可以了,如果刪除一個不存在的元素呢?你可以試試,它肯定會報錯的,像這樣:

ValueError: list.(x): x not in list

另外如果我只知道某個元素的位置呢?怎麼刪除?首先你可以這樣。

animal = ["mokey", "elephent", "tiger", "snake"]

# 刪除位置為1的元素
animal.remove(animal[1])
print(animal)

很顯然,這樣是肯定可行的,因為animal[1]就是位置為1的元素的內容,但是這樣確實有點麻煩啊,python不是以簡單明瞭而著稱的嗎?沒錯,python是絕對不會忘記這點的,所以下面我們嘗試使用del來刪除某個特定位置的元素。

animal = ["mokey", "elephent", "tiger", "snake"]

# 刪除第0個元素
del animal[0]
print(animal)

結果:

["elephent", "tiger", "snake"]

是不是成功的刪除了?但是你會發現為什麼之前用的.remove()方法是放在animal後面且可以傳入一個引數,兒del直接放在animal之前了呢?因為del並不是一個list的方法,而是一個語句,如果你想要刪除整個列表,可以通過del加列表名來實現

animal = ["mokey", "elephent", "tiger", "snake"]

# 刪除animal列表
del animal
print(animal)

結果:

NameError: name 'animal' is not defined

是不是報錯了,這也就意味著我們已經刪除了animal這個列表。 然後,我們再來介紹一下pop()的刪除方式,這個其實挺有意思的,因為它是“彈出”式的刪除,並且,如果pop()不指定引數,它會預設刪除最後位置的元素,還可以制定某個位置來彈出,先看一下例子。

animal = ["mokey", "elephent", "tiger", "snake"]

# 彈出預設位置
animal.pop()
print(animal)

# 彈出第1個元素
animal.pop(1)
print(animal)

結果:

["mokey", "elephent", "tiger"]
["mokey", "tiger"]

但為什麼說它是“彈出”呢?再看下面的程式碼。

animal = ["mokey", "elephent", "tiger", "snake"]

# 彈出預設位置
print(animal.pop())
print(animal)

# 彈出第1個元素
print(animal.pop(1))
print(animal)

結果:

snake
["mokey", "elephent", "tiger"]
elephent
["mokey", "tiger"]

所以看到沒有,為什麼叫“彈出”?因為它在刪除的過程中會給你返回一個要“彈出”的元素,這樣我們就可以知道我們具體刪除的是哪個元素了,很方便有沒有,錄入程式碼自己嘗試一下吧。

4.6 列表的切片

我們想到利用索引值可以取出我們需要的元素,但是我們如果要一次性獲取多個元素呢?這又是一個問題,但是這難不倒我們,道高一尺魔高一丈,python可以滿足你的任何需求。這裡我們用列表的切片來演示一下一次性多個元素的獲取。

animal = ["mokey", "elephent", "tiger", "snake"]

# 獲取第0個到第2個元素
print(animal[0: 3])  # 為啥是3呢,因為切片包括頭不包括尾,記住就好

# 當然它也可以簡寫成這樣
print(animal[:3]) # 結果是一樣的

# 而且還可以獲取某個元素之後的所有元素
print(animal[1:])

# 獲取所有的元素
print(animal[:])

結果:

["mokey", "elephent", "tiger"]
["mokey", "elephent", "tiger"]
["elephent", "tiger", "snake"]

怎麼樣?我們是不是可以以任何方式來獲取元素,下面我們來看一下更高階的切片

# 定義一個包含數字的列表
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 進行步長為2的切片
print(num[0: 9: 2])

# 反轉整個列表
print(num[::-1])

結果:

[1, 3, 5, 7, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]

怎麼樣是不是很有意思,多瞭解一下列表的切片用法,以後會經常用的到。

4.7 列表的Partners

我們已經學習了列表的很多操作方法,比如append,extend,index,remove,pop等等,但我們沒有學到的還有很多,有多少呢,我們用dir方法來看一下list擁有多少種方法。

dir(list)

結果:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', 
'__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', 
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
 '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 
 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

是不是很多,是不是感覺我們學到的東西才冰山一角,我們先介紹幾種比較常用的方法,其他的我們以後會接觸到。

num = [1, 3, 5, 2, 7, 6, 8, 1, 1]

# count()方法用來獲取某個元素在列表中的出現次數
print(num.count(1))

# reverse()方法用來反轉整個列表
num.reverse()
print(num)

# sort()方法用來排序整個列表
num.sort()
print(num)

結果:

3
[1, 1, 8, 6, 7, 2, 5, 3, 1]
[1, 1, 1, 2, 3, 5, 6, 7, 8]

這次的內容以經很多了,所以大家理解了這些方法之後,不妨再去回頭看看這次的內容,溫故而知新可以為師矣嘛,所以一定要清楚複習的重要性。