1. 程式人生 > >Python3.5修煉手冊7

Python3.5修煉手冊7

嵌套列表 duyuheng 列表方法 更新列表

列表


列表不同於元組和字符串的地方:列表的內容是可變(mutable)的。


更新列表的方法有:元素賦值、元素刪除、分片賦值,和列表方法


元素賦值

通過編號標記某個特定位置的元素,並對該位置的元素重新賦值

例如:

>>> a=[1,2,3,4,5,6]
>>> a[1]=10
>>> print(a)

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

>>> a[5]=88
>>> print(a)

[1, 10, 3, 4, 5, 6,88]

從上例可以看出是根據編號對列表中的某個元素進行賦值

下面對上例進行不同類型的賦值

>>> #對編號4的元素賦一個字符串的值
>>> a[4]=‘duyuheng‘
>>> print(a)

[1, 10, 3, 4, ‘duyuheng‘, 88]

>>>  #查看賦值函數類型
... type(a[5])
<class ‘int‘>
>>> type(a[4])

<class ‘str‘>

從賦值函數的類型可以看出,一個列表中的元素可以賦不同類型的值。

千萬要註意;不能對一個不存在元素的位置賦值

可以和乘法中的初始化x個為空的序列結合起來使用

例如:

>>> tring=[None]*5
>>> tring[4]=‘duyuheng‘
>>> print(tring)

[None, None, None, None, ‘duyuheng‘]


增加元素賦值

在Pyhon中是可以給列表增加元素的,使用append()方法就可以使實現

>>> list1=[1,2,3]
>>> list1.append(4)
>>> print(list1)

[1, 2, 3, 4]

append()是一個用於在列表末尾添加新對象的方法。

語法 list.append(obj)

list代表列表,obj 代表需要添加到list列表末尾的對象

註意:append()方法不是簡單的返回一個修改過的新列表,而是直接修改了原來的列表。

append()方法演示:

>>> a=[1,2,3]
>>> #添加字符串
... a.append(‘si‘)
>>> print(a)

[1, 2, 3, ‘si‘]

>>> b=[‘a‘,‘b‘,‘c‘]
>>> #添加數字
... b.append(666)
>>> print(b)

[‘a‘, ‘b‘, ‘c‘, 666]

append()是可以往數字列表中添加字符串,也可以往字符串序列中添加數字。


刪除元素

能在列表中增加元素,當然也可以在列表中刪除元素。

例如:

>>> list2=[‘a‘,‘b‘,‘c‘,‘d‘,‘e‘]
>>> del list2[3]
>>> print(‘刪除第4個元素後:‘,list2)

刪除第4個元素後: [‘a‘, ‘b‘, ‘c‘, ‘e‘]

>>> len(list2)

4

del可以刪除列表中的字符,也可以刪除列表中的數字。

例如:

>>> num=[10,20,30]
>>> len(num)

3

>>> del num[2]
>>> print(‘刪除第3個元素後:‘,num)
>>> len(num)

2


分片賦值

分片賦值是列表的一個強大的特性。

使用list()函數可以直接將字符串轉換為列表。

例如:

>>> list(‘我愛你美麗的姑娘‘)
[‘我‘, ‘愛‘, ‘你‘, ‘美‘, ‘麗‘, ‘的‘, ‘姑‘, ‘娘‘]
>>> boil=list(‘我愛你美麗的姑娘‘)
>>> print(boil)

[‘我‘, ‘愛‘, ‘你‘, ‘美‘, ‘麗‘, ‘的‘, ‘姑‘, ‘娘‘]

可以通過分片賦值直接對列表進行變更。

例如:

>>> show=list(‘hi,boy‘)
>>> print(show)

[‘h‘, ‘i‘, ‘,‘, ‘b‘, ‘o‘, ‘y‘]

>>> show[3:]=list(‘man‘)
>>> print(show)

[‘h‘, ‘i‘, ‘,‘, ‘m‘, ‘a‘, ‘n‘]

從例子中可以看出分片將編號3之後位置的元素做了變更,將boy替換成了man

也可以使用與原序列不等長的序列將分片替換

>>> greeting=list(‘hi‘)
>>> print(greeting)

[‘h‘, ‘i‘]

>>> greeting[1:] =list(‘ello‘)
>>> print(greeting)

[‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]

還可以在不替換任何元素的情況下在任意位置插入新的元素。

例如:

>>> love=list(‘我愛你美麗的姑娘‘)
>>> print(love)

[‘我‘, ‘愛‘, ‘你‘, ‘美‘, ‘麗‘, ‘的‘, ‘姑‘, ‘娘‘]

>>> love[1:1]=list(‘不‘)
>>> print(love)

[‘我‘, ‘不‘, ‘愛‘, ‘你‘, ‘美‘, ‘麗‘, ‘的‘, ‘姑‘, ‘娘‘]

通過分片賦值刪除元素也是可以的

例如:

>>> love=list(‘我愛你美麗的姑娘‘)
>>> print(love)

[‘我‘, ‘愛‘, ‘你‘, ‘美‘, ‘麗‘, ‘的‘, ‘姑‘, ‘娘‘]

>>> love[3:6]=[]
>>> print(love)

[‘我‘, ‘愛‘, ‘你‘, ‘姑‘, ‘娘‘]

分片刪除的功能和del刪除的操作的結果是一樣的


嵌套列表

在列表中可以嵌套列表,且套的列表取出後還是列表。

例如:

>>> field=[‘a‘,‘b‘,‘c‘]
>>> print(field)

[‘a‘, ‘b‘, ‘c‘]

>>> num=[1,2,3]
>>> print(num)

[1, 2, 3]

>>> mix=[field,num]
>>> print(mix)

[[‘a‘, ‘b‘, ‘c‘], [1, 2, 3]]

>>> mix[0]

[‘a‘, ‘b‘, ‘c‘]

>>> mix[1]

[1, 2, 3]


列表方法

方法是與對象有緊密聯系的函數,對象可能是列表、數字,也可能是字符串或者其他類型的對象。

調用語法:對象.方法(參數)


count

count()方法用統計某個元素在列表中出現的次數。

count()方法的語法:

list.count(obj)

list代表列表,obj代表列表中統計的對象。

count()方法演示:

#(以後就使用PyCharm敲代碼了,cmd裏面敲的太累了!!!)

field=list(‘hello.world‘)
print(field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘.‘, ‘w‘, ‘o‘, ‘r‘, ‘k‘, ‘d‘]

print(‘列表field中,字母o的個數:‘,field.count(‘o‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘.‘, ‘w‘, ‘o‘, ‘r‘, ‘k‘, ‘d‘]

列表field中,字母o的個數: 2

print(‘列表field中,字母l的個數:‘,field.count(‘l‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表field中,字母l的個數: 3

print(‘列表field中,字母a的個數:‘,field.count(‘a‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表field中,字母a的個數: 0

listobj=[123,‘hello‘,‘world‘,123]
listobj=[26,‘hello‘,‘world‘,26]
print(‘數字26的個數:‘,listobj.count(26))

C:\python\python.exe C:/python.py/liebiaofangfa.py

數字26的個數: 2

#統計字符串的個數
print(‘hello個數:‘,listobj.count(‘hello‘))

hello個數: 1

也可以這樣使用

print([‘a‘,‘b‘,‘c‘,‘a‘,‘e‘,‘f‘,‘a‘].count(‘a‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

3

還可以這樣使用

mix=[[1,3],5,6,[1,3],2]
print(‘嵌套列表中mix中列表[1,3]的個數為:‘,mix.count([1,3]))

C:\python\python.exe C:/python.py/liebiaofangfa.py

嵌套列表中mix中列表[1,3]的個數為: 2


extend

extend()方法用於在列表的末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)

extend()語法如下;

list.extend(seq)

list代表列表,代表元素列表

extend()方法演示:

a=[‘hello‘,‘world‘]
b=[‘python‘,‘is‘,‘funny‘]
a.extend(b)
print(a)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘hello‘, ‘world‘, ‘python‘, ‘is‘, ‘funny‘]

和序列相加做一個對比

a=[‘hello‘,‘world‘]
b=[‘python‘,‘is‘,‘funny‘]
print(a+b)
print(a)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘hello‘, ‘world‘, ‘python‘, ‘is‘, ‘funny‘]

[‘hello‘, ‘world‘]

兩個示例中a和b的賦值都是一樣的,但是示例1輸出a的值和示例2中輸出a的值確不一樣

extend()和序列相加的主要區別在於:extend()方法修改了被擴展的序列,如前面的a;原始的連接操作會返回一個全新的列表,如上面的示例返回的是一個包涵a和b的副本的新列表,而不會修改原始的變量。

也可以使用分片賦值實現相同的結果

a=[‘hello‘,‘world‘]
b=[‘python‘,‘is‘,‘funny‘]
a[len(a):]=b
print(a)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘hello‘, ‘world‘, ‘python‘, ‘is‘, ‘funny‘]

輸出結果一樣的但是沒有extend()方法易懂


index

index()方法用於從列表中找出某個值第一個匹配項的索引位置。

index()語法如下:

list.index(obj)

list代表列表,obj代表查找的對象。

index()方法演示:

name=[‘duyuheng‘,‘duzhaoli‘,‘xuwei‘,‘gaoshuang‘,‘changting‘]
print(‘duyuheng的索引位置為:‘,name.index(‘duyuheng‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

duyuheng的索引位置為: 0

print(‘xuwei的索引位置為:‘,name.index(‘xuwei‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

xuwei的索引位置為: 2

搜索一個不存在的字符串

print(‘chaiergou的索引位置為:‘,name.index(‘caiergou‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

Traceback (most recent call last):

File "C:/python.py/liebiaofangfa.py", line 7, in <module>

print(‘chaiergou的索引位置為:‘,name.index(‘caiergou‘))

ValueError: ‘caiergou‘ is not in list

報錯:不在列表中


insert

insert()方法用於從列表中找出某個值的第一個匹配項的索引位置。

insert()語法如下:

list.insert(index,obj)

list代表列表,index代表對象obj需要插入的索引位置,obj代表要插入列表中的對象。

insert()方法演示:

num=[1,2,3]
print(‘插入之前的num:‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之前的num: [1, 2, 3]

num.insert(2,‘插入之前在2之後,3之前‘)
print(‘插入之後的num:‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之後的num: [1, 2, ‘插入之前在2之後,3之前‘, 3]

insert()也可以使用分片賦值的方法實現

例如:

num=[1,2,3]
print(‘插入之前的num:‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之前的num: [1, 2, 3]

num[2:2]=[‘插入之前在2之後3之前‘]
print(‘插入之後的num:‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之後的num: [1, 2, ‘插入之前在2之後3之前‘, 3]

輸出的結果和insert()的一樣,但是沒有insert容易理解。


pop

pop()方法用於移除列表中的一個元素(默認為最後一個元素),並且返回該元素的值。

pop()的語法如下:

list.pop(obj=list[-1])

list代表列表,obj為可選擇的參數,list[-1]代表要移除列表元素的對象。

pop()方法演示:

field=[‘hello‘,‘world‘,‘python‘,‘is‘,‘funny‘]
#不傳參數,默認移除最後一個元素
field.pop()
print(‘移除元素後的field:‘,field)
#移除編號為3的元素is
field.pop(3)
print(‘移除元素後的field:‘,field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

移除元素後的field: [‘hello‘, ‘world‘, ‘python‘, ‘is‘]

移除元素後的field: [‘hello‘, ‘world‘, ‘python‘]

pop()方法是唯一一個即能修改列表又能返回元素值(除了None)的列表方法。

使用pop的方法可以實現一種常見的數據結構——棧

棧的原理,最後放入棧的最先被移除,稱為LIFO(Last In First Out),即先進先出。

棧中的放入和移除操作有統一的稱謂——入棧(push)和出棧(pop)。

python沒有入棧方法,可以使用append方法代替。

pop方法和append方法的操作結果恰好相反。

如果入棧(或追加)剛剛出棧的值,最後的的結果就不會變

例如:

num=[1,2,3]
#追加默認出棧的值
num.append(num.pop())
print(‘num追加默認出棧值的操作結果‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

num追加默認出棧值的操作結果 [1, 2, 3]

通過追加默認出棧的值得到的列表和原來的是一樣的。


remove

remove()方法用於移除列表中的某個值的第一個匹配項。

remove()語法如下:

list.remove(obj)

list代表列表,obj為列表中要移除的對象。

remove()方法演示:

field=[‘我愛‘,‘美麗‘,‘姑娘‘]
print(‘移除前的列表field:‘,field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

移除前的列表field [‘我愛‘, ‘美麗‘, ‘姑娘‘]

field.remove(‘美麗‘)
print(‘移除後的列表field:‘,field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

移除後的列表field: [‘我愛‘, ‘姑娘‘]

#移除一個不存在的值
field.remove(‘鳳姐‘)
print(‘移除後的列表field:‘,field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

Traceback (most recent call last):

File "C:/python.py/liebiaofangfa.py", line 8, in <module>

field.remove(‘鳳姐‘)

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

報錯:不在列表中

註意:remove是一個沒有返回值的原位置元素的變更方法,它修改了列表確沒有返回值,與pop方法正好相反。


reverse

reverse()方法用於反向列表中的元素

reverse()的語法如下:

list.reverse()

list代表列表,該方法不需要傳入參數。

reverse()方法演示:

num=[1,2,3]
print(‘列表反轉之前的num:‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表反轉之前的num: [1, 2, 3]

num.reverse()
print(‘列表反轉之後的num:‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表反轉之後的num: [3, 2, 1]

該方法改變了列表但不返回值(和前面remove一樣)。

如果需要對一個序列進行反向叠代,那麽就可以用reverse函數。

這個函數並不返回列表,而是返回一個叠代器(Iterator)對象,可以通過list函數把返回的對象轉換為列表。

例如:

num=[1,2,3]
print(‘使用reversed函數翻轉結果:‘,list(reversed(num)))

C:\python\python.exe C:/python.py/liebiaofangfa.py

使用reversed函數翻轉結果: [3, 2, 1]

輸出結果對原序列進行反向叠代了


sort

sort()對原序列表進行排序,如果指定參數,就會使用該參數指定的比較方法進行排序。

sort()語法如下:

list.sort(func)

list代表列表,func為可選參數。如果指定該參數,就會使用該參數的方法進行排序。

sort()方法演示:

num=[2,5,1,4,7]
num.sort()
print(‘num調用sort方法後:‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

num調用sort方法後: [1, 2, 4, 5, 7]

sort方法改變了原來的列表,而不是簡單的返回一個已排序的列表副本。

如果用戶需要一個排好序的列表副本,同時又保留原有列表不變該怎麽實現。

實現的方式是先把num的副本賦值給n,然後對n進行排序如下

num=[2,5,1,4,7]
#將列表切片後賦值給n
n=num[:]
n.sort()
print(‘變量n的結果是‘,n)
print(‘num的結果是‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

變量n的結果是 [1, 2, 4, 5, 7]

num的結果是 [2, 5, 1, 4, 7]

進行該操作的時候一定要對原序列進行分片,不要讓兩個列表指向同一個列表否則兩個序列都會被排序。

sort方法有一個同樣功能的函數———sorted函數,該函數可以直接獲取列表副本進行排序

例如:

num=[2,5,1,4,7]
n=sorted(num)
print(‘變量n的結果是‘,n)
print(‘num的結果是‘,num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

變量n的結果是 [1, 2, 4, 5, 7]

num的結果是 [2, 5, 1, 4, 7]

sorted函數可以用於任何序列,返回的結果都是一個列表。

例如:

print(sorted(‘python‘))
print(sorted(‘31745‘))

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘h‘, ‘n‘, ‘o‘, ‘p‘, ‘t‘, ‘y‘]

[‘1‘, ‘3‘, ‘4‘, ‘5‘, ‘7‘]


clear

clear()方法用於清空列表,類似於 del [a:]。

clear()語法如下:

list.clear()

list代表列表,不需要傳入參數

clear()方法演示:

name=[‘duyuheng‘,‘duzhaoli‘,‘gaoshuang‘,‘xuwei‘]
name.clear()
print(‘name調用clear方法後的結果:‘,name)

C:\python\python.exe C:/python.py/liebiaofangfa.py

name調用clear方法後的結果: []


copy

copy()方法用於復制列表,類似a[:]。

copy()語法如下:

list.copy()

list代表列表,不需要傳入參數。

copy()方法演示:

name1=[‘duyuheng‘,‘duzhaoli‘,‘gaoshuang‘,‘xuwei‘]
name2=name1.copy()
print(‘name2復制的結果:‘,name2)

C:\python\python.exe C:/python.py/liebiaofangfa.py

name2復制的結果: [‘duyuheng‘, ‘duzhaoli‘, ‘gaoshuang‘, ‘xuwei‘]


高級排序

如果希望元素能按特定的方式進行排序(不是使用sort方法默認的按升序排列元素),就可以自定義比較方法。

sort方法有兩個可選參數,即key和reverse。要使用他們就要通過名字指定,我們稱之為關鍵字參數。

示例:

field = [‘study‘,‘python‘,‘is‘,‘happy‘]
#按字符串由短到長排序
field.sort(key=len)
print(field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘is‘, ‘study‘, ‘happy‘, ‘python‘]

#按字符串由長到短排序,需要傳遞兩個參數

field.sort(key=len,reverse=True)
print(field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[‘python‘, ‘study‘, ‘happy‘, ‘is‘]

可以做排序後逆序

例如:

num=[8,6,1,4,5]
num.sort(reverse=True)
print(num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[8, 6, 5, 4, 1]



本文出自 “duyuheng” 博客,謝絕轉載!

Python3.5修煉手冊7