python內置序列類型最常見的是列表,元組和字符串。(序列是python中最基礎的數據結構,而數據結構是計算機存儲,組織數據的方式。)
另外還提供了字典和集合的數據結構,但他們屬于無順序的數據集合體,不能像前者通過位置索引來訪問數據。python序列中的每個元素都有一個序號(元素的具體位置),這個序號叫索引,索引下標從0開始,以此類推......?
本文著重介紹python的序列及其實際應用,鞏固python語法基礎。
?
?
一、序列概念
?
數據結構:以某種方式組合起來的數據元素的集合。
序列:以編號方式組合起來的數據元素的集合。
?
二、序列特點以及通用操作
-
索引:通過[n]獲取第n號元素值。n>0索引方向從左向右(0開始),n<0索引方向從右向左(-1開始)。函數調用返回的是序列時,可以直接對其進行索引。
-
切片:用[a:b:c]訪問 [a,b) 范圍內的元素。a,b,c均可正可負可空。a:起始位,b:結束位,c:步長。?
-
相加:只可拼接同類型的序列。
-
相乘:重復序列x次。
-
檢查:使用in運算符判斷序列中是否有某成員。返回布爾值(True|False)
-
通用內置函數:len返回序列內元素的個數,min和max分別返回序列內元素的最大值和最小值
?
?
?
三、python內置序列1——list
列表定義
形如:[a,b,c,d],數據元素可以是另一個序列,元素可修改。
?
列表構建
list()可以將其它序列轉換為列表。
?
列表基本操作
-
修改元素:直接選中賦值?ls[1]='e'
-
刪除元素:del語句?del ls[1]
-
批量修改元素:使用切片賦值增刪改原有數據元素 ls[1:1]='ello'
?
列表常用方法
-
append:列表末尾添加一個對象(可以是一個列表)
-
clear:只清空,不刪除列表
-
copy:與ls1=ls2不同,ls2=ls1.copy()后修改ls2不影響ls1
-
count:計算元素出現次數
-
extend:列表末尾添加多個值
-
index:查找某元素在列表中出現第一次的索引值
-
insert:列表某個位置添加一個對象 ls.insert(2,'a')
-
pop:刪除一個元素并返回該元素,默認為刪除末尾元素?
后進先出:ls.append(ls.pop())
先進先出:ls.append(ls.pop(0)) | ls.insert(0,ls.pop())
-
remove:刪除列表中第一次出現的指定元素
-
reverse:相反排序,反轉。
reversed(ls)函數返回一個迭代器,list(reversed(ls))可以轉換為列表
-
sort:排序sort(key,reverse) key:用于排序的函數,reverse:True(降序) | False(升序)。sorted(ls,key,reverse),sorted返回列表
?
?
四、python內置序列2——tuple
元組定義
形如:(a,b,c,d),元素不可修改。
元組構建
單值:1, | (1)
多值:1,2,3 | (1,2,3)
tuple()將其它序列轉換為元組
元組作用
python很多內置函數和方法返回元組,可作為映射中的鍵。
五、python內置序列3——字符串
字符串定義
形如:‘abcd’,元素不可修改。
字符串構建
join()方法可以合并序列為字符串,sep.join(seq):seq各元素間由sep相接,合并為一個字符串
字符串常用方法
-
count:統計
-
find:查找某字符串是否存在,不存在返回-1
-
replace:參數:(替換的字符,替換的內容,替換的次數)
-
strip:去除左右空格,lstrip/rstrip去左空格/去右空格
-
分割:split(字符,次數)返回列表。partition(),只分割第一次出現的位置,分割內容本身也在元組內單獨為一個元素,返回元組
-
大小寫:capitalize()第一個字符大寫,title()字符串每個單詞首字母大寫,lower()/upper()全小寫/全大寫
-
判斷:startwith/endwith:判斷開頭結尾字符。isalpha/isalnum/isdigit/isspace:判斷字符串全為字母/字母+數字/全為數字/全為空
?
使用序列示例概覽:
#定義一個學生序列
>>> stuinfo=['liuwang','xuezhang','zuishuai',18,20]
列表相加:
#定義學生姓名和學生年齡,然后再定義一個屬于自己的數據庫將兩個列表加入
>>> stuname=['liuwang','xuezhang','zuishuai']
>>> stuage=[18,20,16]
>>> database=[stuname,stuage]
>>> database
[['liuwang','xuezhang','zuishuai'], [18, 20, 16]]
通用序列操作索引使用:
?
序列中所有元素都有編號,這些編號是從0開始,依次遞增,訪問這些元素通過下標即可訪問,而這個編號就是索引,例如:
>>> database
[['liuwang','xuezhang','zuishuai'], [18, 20, 16]]>>> database[0]
['liuwang', '學長', 'zuishuai']
>>> database[1]
[18, 20, 16]
#字符串序列的索引
>>> str='hello'
>>> str[0]
'h'
>>> str[1]
'e'
?
注意兩種索引方式:剛剛我們使用的是0開始的正向索引,
當使用負數索引時,Python會從右邊到左進行所有,-1是從序列的最后一個元素開始,如下:
?
?
#從最后一個元素開始
>>> str[-1]
'o'
#從倒數第二個元素開始
>>> str[-2]
'l'
?
2.切片
?
同樣的和索引類似,切片是通過冒號操作來訪問一定范圍內的元素,例如:
?
# 構建一個序列tag,里面包含一個元素
>>> tag=['https://www.wakemeupnow.cn']# 拿到這個元素后通過分片取出一個范圍的值(示例域名是我的博客嘿嘿)
>>> tag[0][8:]
'www.wakemeupnow.cn'
由上所知,切片操作的的實現需要提供兩個索引作為邊界,是一個左閉右開的區間。
除了上述方案,也可以通過顯示方式進行操作:
2.1 切片快捷操作
>>> num[0:3]
# 取到前面3個數據
[1, 2, 3]
2.2 分片步長操作
?
分片操作可以給元素設置步長,在開始和結束的時候指定相應步長獲取元素,例如:
?
# 按照步長為2返回第1個和第6個之間的元素
>>> num[0:6:2]
[1, 3, 5]
?
另外需要注意的是負數步長是從元素尾部到前遍歷整個序列,所以負數的分片開始索引一定要大于結束索引
>>> num[7:-1]
[8, 9]
當開始索引和結束索引是負數時開始所以必須小于結束索引:
?
>>> num[-9:-1]
[2, 3, 4, 5, 6, 7, 8, 9]
對于一個正數步長,Python會從序列的頭部開始向右提取元素,直達最后一個元素,而對于負數步長,則是從序列的尾部開始向左提取元素,直達提取到第一個,例如:
# 提取前6個元素,步長為2
>>> num[:6:2]
[1, 3, 5]
# 提取從后往前的8個元素,步長為2
>>> num[:2:-2]
[10, 8, 6, 4]
3.序列相加
?
序列相加通過加號“+”進行序列和序列之間的連接操作:
>>> 'hello'+' 學長!'
'hello 學長!'>>> [1,2,3]+['liuwang','學長']
[1, 2, 3, 'liuwang', '學長']
?
注意:只有相同類型的序列才能進行連接操作。
?
4.序列相乘
?
一個數字x乘以一個序列會產生一個新的序列,原來的序列會被重置成x次
>>> ['hello'+' world !']*3
['hello world !', 'hello world !', 'hello world !']
5.成員資格
?
檢查一個元素是否在一個序列中使用運算符in進行檢查, in運算符返回檢查某個條件的布爾值,若為真返回true,否則返回false,例如:
>>> str='hello'
>>> 'h' in str
True>>> 'x' in str
False
6.序列長度、最大值和最小值
?
序列長度、最大值和最小值使用內建函數len、max、min進行檢測,len返回序列中所包含的元素數量,max和min分別返回序列中最大值和最小值的元素
>>> len([11,34,23])
3
>>> max(11,34,23)
34
>>> min(11,34,23)
11
總結
本節給大家介紹了 Python ?數據結構之序列的使用,對 Python 工程師使用提供了支撐,可以在項目中實際應用中取出相應元素,今天的知識別不是很難,但是需要牢牢地鞏固。
?
?