日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python3數(shù)據(jù)結(jié)構(gòu)

Python3 數(shù)據(jù)結(jié)構(gòu)

本章節(jié)我們主要結(jié)合前面所學的知識點來介紹Python數(shù)據(jù)結(jié)構(gòu)。

創(chuàng)新互聯(lián)公司專注于酒泉企業(yè)網(wǎng)站建設(shè),響應式網(wǎng)站設(shè)計,商城建設(shè)。酒泉網(wǎng)站建設(shè)公司,為酒泉等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)


列表

Python中列表是可變的,這是它區(qū)別于字符串和元組的最重要的特點,一句話概括即:列表可以修改,而字符串和元組不能。

以下是 Python 中列表的方法:

方法 描述
list.append(x) 把一個元素添加到列表的結(jié)尾,相當于 a[len(a):] = [x]。
list.extend(L) 通過添加指定列表的所有元素來擴充列表,相當于 a[len(a):] = L。
list.insert(i, x) 在指定位置插入一個元素。第一個參數(shù)是準備插入到其前面的那個元素的索引,例如 a.insert(0, x) 會插入到整個列表之前,而 a.insert(len(a), x) 相當于 a.append(x) 。
list.remove(x) 刪除列表中值為 x 的第一個元素。如果沒有這樣的元素,就會返回一個錯誤。
list.pop([i]) 從列表的指定位置移除元素,并將其返回。如果沒有指定索引,a.pop()返回最后一個元素。元素隨即從列表中被移除。(方法中 i 兩邊的方括號表示這個參數(shù)是可選的,而不是要求你輸入一對方括號,你會經(jīng)常在 Python 庫參考手冊中遇到這樣的標記。)
list.clear() 移除列表中的所有項,等于del a[:]。
list.index(x) 返回列表中第一個值為 x 的元素的索引。如果沒有匹配的元素就會返回一個錯誤。
list.count(x) 返回 x 在列表中出現(xiàn)的次數(shù)。
list.sort() 對列表中的元素進行排序。
list.reverse() 倒排列表中的元素。
list.copy() 返回列表的淺復制,等于a[:]。

下面示例演示了列表的大部分方法:

實例

>>> a
=
[
66.25
,
333
,
333
,
1
,
1234.5
]


>>>
print
(a.
count
(
333
)
, a.
count
(
66.25
)
, a.
count
(
'x'
)
)


2
1
0


>>> a.
insert
(
2
, -
1
)


>>> a.
append
(
333
)


>>> a


[
66.25
,
333
, -
1
,
333
,
1
,
1234.5
,
333
]


>>> a.
index
(
333
)


1


>>> a.
remove
(
333
)


>>> a


[
66.25
, -
1
,
333
,
1
,
1234.5
,
333
]


>>> a.
reverse
(
)


>>> a


[
333
,
1234.5
,
1
,
333
, -
1
,
66.25
]


>>> a.
sort
(
)


>>> a


[-
1
,
1
,
66.25
,
333
,
333
,
1234.5
]

注意:類似 insert, remove 或 sort 等修改列表的方法沒有返回值。


將列表當做堆棧使用

列表方法使得列表可以很方便的作為一個堆棧來使用,堆棧作為特定的數(shù)據(jù)結(jié)構(gòu),最先進入的元素最后一個被釋放(后進先出)。用 append() 方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來。例如:

實例

>>> stack
=
[
3
,
4
,
5
]


>>> stack.
append
(
6
)


>>> stack.
append
(
7
)


>>> stack


[
3
,
4
,
5
,
6
,
7
]


>>> stack.
pop
(
)


7


>>> stack


[
3
,
4
,
5
,
6
]


>>> stack.
pop
(
)


6


>>> stack.
pop
(
)


5


>>> stack


[
3
,
4
]


將列表當作隊列使用

也可以把列表當做隊列用,只是在隊列里第一加入的元素,第一個取出來;但是拿列表用作這樣的目的效率不高。在列表的最后添加或者彈出元素速度快,然而在列表里插入或者從頭部彈出速度卻不快(因為所有其他的元素都得一個一個地移動)。

實例

>>>
from
collections
import deque


>>> queue
= deque
(
[
"Eric"
,
"John"
,
"Michael"
]
)


>>> queue.
append
(
"Terry"
)          
# Terry arrives


>>> queue.
append
(
"Graham"
)          
# Graham arrives


>>> queue.
popleft
(
)                
# The first to arrive now leaves


'Eric'


>>> queue.
popleft
(
)                
# The second to arrive now leaves


'John'


>>> queue                          
# Remaining queue in order of arrival

deque
(
[
'Michael'
,
'Terry'
,
'Graham'
]
)


列表推導式

列表推導式提供了從序列創(chuàng)建列表的簡單途徑。通常應用程序?qū)⒁恍┎僮鲬糜谀硞€序列的每個元素,用其獲得的結(jié)果作為生成新列表的元素,或者根據(jù)確定的判定條件創(chuàng)建子序列。

每個列表推導式都在 for 之后跟一個表達式,然后有零到多個 for 或 if 子句。返回結(jié)果是一個根據(jù)表達從其后的 for 和 if 上下文環(huán)境中生成出來的列表。如果希望表達式推導出一個元組,就必須使用括號。

這里我們將列表中每個數(shù)值乘三,獲得一個新的列表:

>>> vec
=
[
2
,
4
,
6
]


>>>
[
3*x
for x
in vec
]


[
6
,
12
,
18
]

現(xiàn)在我們玩一點小花樣:

>>>
[
[x
, x**
2
]
for x
in vec
]


[
[
2
,
4
]
,
[
4
,
16
]
,
[
6
,
36
]
]

這里我們對序列里每一個元素逐個調(diào)用某方法:

實例

>>> freshfruit
=
[
'  banana'
,
'  loganberry '
,
'passion fruit  '
]


>>>
[weapon.
strip
(
)
for weapon
in freshfruit
]


[
'banana'
,
'loganberry'
,
'passion fruit'
]

我們可以用 if 子句作為過濾器:

>>>
[
3*x
for x
in vec
if x
>
3
]


[
12
,
18
]


>>>
[
3*x
for x
in vec
if x
<
2
]


[
]

以下是一些關(guān)于循環(huán)和其它技巧的演示:

>>> vec1
=
[
2
,
4
,
6
]


>>> vec2
=
[
4
,
3
, -
9
]


>>>
[x*y
for x
in vec1
for y
in vec2
]


[
8
,
6
, -
18
,
16
,
12
, -
36
,
24
,
18
, -
54
]


>>>
[x+y
for x
in vec1
for y
in vec2
]


[
6
,
5
, -
7
,
8
,
7
, -
5
,
10
,
9
, -
3
]


>>>
[vec1
[i
]*vec2
[i
]
for i
in
range
(
len
(vec1
)
)
]


[
8
,
12
, -
54
]

列表推導式可以使用復雜表達式或嵌套函數(shù):

>>>
[
str
(
round
(
355/
113
, i
)
)
for i
in
range
(
1
,
6
)
]


[
'3.1'
,
'3.14'
,
'3.142'
,
'3.1416'
,
'3.14159'
]


嵌套列表解析

Python的列表還可以嵌套。

以下實例展示了3X4的矩陣列表:

>>> matrix
=
[

...    
[
1
,
2
,
3
,
4
]
,

...    
[
5
,
6
,
7
,
8
]
,

...    
[
9
,
10
,
11
,
12
]
,

...
]

以下實例將3X4的矩陣列表轉(zhuǎn)換為4X3列表:

>>>
[
[row
[i
]
for row
in matrix
]
for i
in
range
(
4
)
]


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

以上實例也可以使用以下方法來實現(xiàn):

>>> transposed
=
[
]


>>>
for i
in
range
(
4
):

...    
transposed.
append
(
[row
[i
]
for row
in matrix
]
)

...


>>> transposed


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

另外一種實現(xiàn)方法:

>>> transposed
=
[
]


>>>
for i
in
range
(
4
):

...    
# the following 3 lines implement the nested listcomp

...    
transposed_row
=
[
]

...    
for row
in matrix:

...        
transposed_row.
append
(row
[i
]
)

...    
transposed.
append
(transposed_row
)

...


>>> transposed


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


del 語句

使用 del 語句可以從一個列表中根據(jù)索引來刪除一個元素,而不是值來刪除元素。這與使用 pop() 返回一個值不同??梢杂?del 語句從列表中刪除一個切割,或清空整個列表(我們以前介紹的方法是給該切割賦一個空列表)。例如:

>>> a
=
[-
1
,
1
,
66.25
,
333
,
333
,
1234.5
]


>>>
del a
[
0
]


>>> a


[
1
,
66.25
,
333
,
333
,
1234.5
]


>>>
del a
[
2:
4
]


>>> a


[
1
,
66.25
,
1234.5
]


>>>
del a
[:
]


>>> a


[
]

也可以用 del 刪除實體變量:

>>> del a

元組和序列

元組由若干逗號分隔的值組成,例如:

>>> t
=
12345
,
54321
,
'hello!'


>>> t
[
0
]


12345


>>> t


(
12345
,
54321
,
'hello!'
)


>>>
# Tuples may be nested:

...
u
= t
,
(
1
,
2
,
3
,
4
,
5
)


>>> u


(
(
12345
,
54321
,
'hello!'
)
,
(
1
,
2
,
3
,
4
,
5
)
)

如你所見,元組在輸出時總是有括號的,以便于正確表達嵌套結(jié)構(gòu)。在輸入時可能有或沒有括號, 不過括號通常是必須的(如果元組是更大的表達式的一部分)。


集合

集合是一個無序不重復元素的集?;竟δ馨P(guān)系測試和消除重復元素。

可以用大括號({})創(chuàng)建集合。注意:如果要創(chuàng)建一個空集合,你必須用 set() 而不是 {} ;后者創(chuàng)建一個空的字典,下一節(jié)我們會介紹這個數(shù)據(jù)結(jié)構(gòu)。

以下是一個簡單的演示:

>>> basket
=
{
'apple'
,
'orange'
,
'apple'
,
'pear'
,
'orange'
,
'banana'
}


>>>
print
(basket
)                      
# 刪除重復的


{
'orange'
,
'banana'
,
'pear'
,
'apple'
}


>>>
'orange'
in basket                
# 檢測成員


True


>>>
'crabgrass'
in basket


False

>>>
# 以下演示了兩個集合的操作

...


>>> a
=
set
(
'abracadabra'
)


>>> b
=
set
(
'alacazam'
)


>>> a                                  
# a 中唯一的字母


{
'a'
,
'r'
,
'b'
,
'c'
,
'd'
}


>>> a - b                              
# 在 a 中的字母,但不在 b 中


{
'r'
,
'd'
,
'b'
}


>>> a | b                              
# 在 a 或 b 中的字母


{
'a'
,
'c'
,
'r'
,
'd'
,
'b'
,
'm'
,
'z'
,
'l'
}


>>> a & b                              
# 在 a 和 b 中都有的字母


{
'a'
,
'c'
}


>>> a ^ b                              
# 在 a 或 b 中的字母,但不同時在 a 和 b 中


{
'r'
,
'd'
,
'b'
,
'm'
,
'z'
,
'l'
}

集合也支持推導式:

>>> a
=
{x
for x
in
'abracadabra'
if x
not
in
'abc'
}


>>> a


{
'r'
,
'd'
}


字典

另一個非常有用的 Python 內(nèi)建數(shù)據(jù)類型是字典。

序列是以連續(xù)的整數(shù)為索引,與此不同的是,字典以關(guān)鍵字為索引,關(guān)鍵字可以是任意不可變類型,通常用字符串或數(shù)值。

理解字典的最佳方式是把它看做無序的鍵=>值對集合。在同一個字典之內(nèi),關(guān)鍵字必須是互不相同。

一對大括號創(chuàng)建一個空的字典:{}。

這是一個字典運用的簡單例子:

>>> tel
=
{
'jack':
4098
,
'sape':
4139
}


>>> tel
[
'guido'
]
=
4127


>>> tel


{
'sape':
4139
,
'guido':
4127
,
'jack':
4098
}


>>> tel
[
'jack'
]


4098


>>>
del tel
[
'sape'
]


>>> tel
[
'irv'
]
=
4127


>>> tel


{
'guido':
4127
,
'irv':
4127
,
'jack':
4098
}


>>>
list
(tel.
keys
(
)
)


[
'irv'
,
'guido'
,
'jack'
]


>>>
sorted
(tel.
keys
(
)
)


[
'guido'
,
'irv'
,
'jack'
]


>>>
'guido'
in tel


True


>>>
'jack'
not
in tel


False

構(gòu)造函數(shù) dict() 直接從鍵值對元組列表中構(gòu)建字典。如果有固定的模式,列表推導式指定特定的鍵值對:

>>>
dict
(
[
(
'sape'
,
4139
)
,
(
'guido'
,
4127
)
,
(
'jack'
,
4098
)
]
)


{
'sape':
4139
,
'jack':
4098
,
'guido':
4127
}

此外,字典推導可以用來創(chuàng)建任意鍵和值的表達式詞典:

>>>
{x: x**
2
for x
in
(
2
,
4
,
6
)
}


{
2:
4
,
4:
16
,
6:
36
}

如果關(guān)鍵字只是簡單的字符串,使用關(guān)鍵字參數(shù)指定鍵值對有時候更方便:

>>>
dict
(sape
=
4139
, guido
=
4127
, jack
=
4098
)


{
'sape':
4139
,
'jack':
4098
,
'guido':
4127
}


遍歷技巧

在字典中遍歷時,關(guān)鍵字和對應的值可以使用 items() 方法同時解讀出來:

>>> knights
=
{
'gallahad':
'the pure'
,
'robin':
'the brave'
}


>>>
for k
, v
in knights.
items
(
):

...    
print
(k
, v
)

...


gallahad the pure

robin the brave

在序列中遍歷時,索引位置和對應值可以使用 enumerate() 函數(shù)同時得到:

>>>
for i
, v
in
enumerate
(
[
'tic'
,
'tac'
,
'toe'
]
):

...    
print
(i
, v
)

...


0 tic


1 tac


2 toe

同時遍歷兩個或更多的序列,可以使用 zip() 組合:

>>> questions
=
[
'name'
,
'quest'
,
'favorite color'
]


>>> answers
=
[
'lancelot'
,
'the holy grail'
,
'blue'
]


>>>
for q
, a
in
zip
(questions
, answers
):

...    
print
(
'What is your {0}?  It is {1}.'.
format
(q
, a
)
)

...


What
is your name?  It
is lancelot.


What
is your quest?  It
is the holy grail.


What
is your favorite color?  It
is blue.

要反向遍歷一個序列,首先指定這個序列,然后調(diào)用 reversed() 函數(shù):

>>>
for i
in
reversed
(
range
(
1
,
10
,
2
)
):

...    
print
(i
)

...


9


7


5


3


1

要按順序遍歷一個序列,使用 sorted() 函數(shù)返回一個已排序的序列,并不修改原值:

>>> basket
=
[
'apple'
,
'orange'
,
'apple'
,
'pear'
,
'orange'
,
'banana'
]


>>>
for f
in
sorted
(
set
(basket
)
):

...    
print
( 網(wǎng)頁題目:Python3數(shù)據(jù)結(jié)構(gòu)
標題URL:http://www.dlmjj.cn/article/cdjjjdi.html