距離上次的小專案已經休息了很長一段時間,是時候來繼續本系列教程了。這一節開始我們將深入python中的資料結構。
在python中,最基本的資料結構是序列,序列包含乙個或多個元素,每個元素有乙個序號,也就是元素的位置,也稱為索引。第乙個索引是0,第二個是1,以此類推。
說到這裡,可能大家都想到了列表。確實,python中有好幾種內建(自帶)的序列,列表就是其中一種,當然,元組也是。其他的內建序列型別有字串、位元組串等。
至於字串,它其實就是乙個由許多字元組成的序列,索引0指向第乙個字元,索引1指向第二個字元……
本系列教程主要學習列表、元組、字串這三種序列,位元組串不詳細討論。
所有的序列型別都有一些共同的操作,這些操作包括:索引、分片、加法、乘法還有檢查某個元素是否包含在序列中。除此以外,python中還有一系列針對序列的內建函式。
索引索引操作其實就是通過索引訪問元素的操作,十分簡單,況且之前也有提過,在這裡直接給出例子:
>>
> s =
'hello'
>>
> s[0]
# 正向索引
'h'>>
> s[-1
]# 反向索引
'o'>>
>
要注意的是,反向索引時,末尾元素的索引應該是-1,而不是-0,因為-0就是0,不然就與首元素索引重合了。
分片索引只可以訪問乙個元素,而分片可以訪問一定區間(範圍)內的元素。分片通過冒號隔開的兩個索引來實現,前乙個索引表示起點(包括起點),後乙個索引包括終點(不包括終點):
>>
> s =
'hello world'
>>
> s[0:
5]'hello'
>>
> lst =[1
,2,3
,4,5
]>>
> lst[1:
-1][
2,3,
4]
省略第乙個索引表示從首元素開始:
>>
> lst =[1
,2,3
,4,5
]>>
> lst[:3
][1,
2,3]
省略第二個索引表示索引的範圍包含起點以及起點之後的所有元素:
>>
> lst =[1
,2,3
,4,5
]>>
> lst[1:
][2,
3,4,
5]>>
> lst[:]
# 兩個索引都省略[1
,2,3
,4,5
]
要注意的是,下面兩種分片並不等價:
>>
> lst[1:
][2,
3,4,
5]>>
> lst[1:
-1][
2,3,
4]
注意:分片操作返回的序列是從原序列複製指定的範圍內的元素而生成的,在新的序列中給元素重新賦值,並不影響原序列。
我們還可以再指定乙個數字來表示步長,具體看下面例子:
>>
> lst =[1
,2,3
,4,5
,6,7
,8,9
,10]>>
> lst[0:
10:2]
[1,3
,5,7
,9]
上面的例子中,從索引0開始,每2個元素就取乙個元素,這個2就是我所說的步長,在之前的例子中,我們的沒有提供步長,這時的步長預設就是1。
當然,步長不可以為0,步長為0將會報錯。但是步長可以是負數!,這時分片從右往左提取元素:
>>
> lst =[1
,2,3
,4,5
,6,7
,8,9
,10]>>
> lst[3:
1:-1
][4,
3]
上面例子中,分片從索引4的元素開始,每一步取乙個元素,直到索引1(不包括該元素)。
使用負數的步長常常會使人困惑,建議如無必要,還是不要使用負數的步長。
加法通過使用加法運算子+
,我們可以進行序列的連線操作:
>>
>[1
,2,3
]+[4
,5,6
][1,
2,3,
4,5,
6]>>
>
'hello'
+'world'
'helloworld'
>>
>(1
,2)+
(3,4
)(1,
2,3,
4)
這十分簡單,不過要注意,只有在相同型別的序列之間,才可以進行相加,不然就報錯:
>>
>[1
,2,3
]+'hello'
traceback (most recent call last)
: file ""
, line 1,in
typeerror: can only concatenate list
(not
"str"
) to list
乘法
我們把乙個序列與整數n相乘來生成乙個新的序列,這個新的序列將被重複n次:
>>
>[1
,2,3
]*5[
1,2,
3,1,
2,3,
1,2,
3,1,
2,3,
1,2,
3]>>
>
'hello '*3
'hello hello hello '
成員資格
我們把確認乙個值是否在序列中,稱為檢查這個值在序列中的成員資格。我們可以用運算子in
來實現:
>>
> lst =[1
,2,3
,4]>>
>
1in lst
true
>>
>
0in lst
false
字串比較特殊,我們不僅可以檢查某個字元是否在乙個字串中,而且可以檢查某個另乙個字串是否在該字串中:
>>
> s =
'hello world'
>>
>
'w'in s
true
>>
>
'world'
in s
true
操作序列的函式
除了上面的序列操作外,python還提供了一些內建函式用於操作序列,下面介紹最常用的len、min、max函式。
使用len函式可以得到序列的長度,也就是序列中元素的數量:
>>
> lst =[1
,2,3
]>>
>
len(lst)
3>>
> s =
'hello'
>>
>
len(s)
5
min和max函式分別返回序列中的最小和最大的元素:
>>
> lst =[1
,2,3
,4,5
]>>
>
min(lst)
1>>
>
max(
'hello world'
)'w'
min和max函式的引數還可以是多個引數:
>>
>
max(3,
2,4,
2,5)
5>>
>
min(3,
2,4,
2,5)
2
這個時候相當於全部引數被收集成乙個列表,再從中求出最大或最小的元素
本節到此為止,讀者們好好消化,我們下期再見!
Python基礎 (四)序列2
集合dict b dict name wwy age 18,job student c dict name wwy age 18 job student a zip d name age job e wwy 18,student f dist zip d,e f fromkeys g dict.fr...
python核心程式設計四 序列 字串,列表,元組
1.序列成員關係操作符 in,not in 2.序列型別操作符 序列操作符 作用 seq ind 獲得下標為ind 的元素 seq ind1 ind2 獲得下標從ind1 到ind2 間的元素集合 seq expr序列重複expr 次 seq1 seq2連線序列seq1 和seq2 obj in s...
資料結構(四) 串
串 string 是由零個或多個字元構成的有限序列,又叫字串 空格串 只包含空格的串 空串 零個字元的串 串的大小比較 對於數字來說,1與2 誰大誰小不用討論,但是 兩個字串怎麼比較大小呢?計算機的常用字元是使用標準的ascii編碼。所以我們字串的比較就是逐個的比較ascii值的大小 串的一些操作函...