您好钟些,我是碼農(nóng)飛哥政恍,感謝您閱讀本文篙耗,歡迎一鍵三連哦宗弯。
本文主要介紹Python數(shù)據(jù)類型中序列和字符串蒙保,文末有彩蛋哦
干貨滿滿邓厕,建議收藏详恼,用到時趁粱ィ看常新。 小伙伴們?nèi)缬袉栴}及需要屿储,請留言告訴我哦~ ~ ~够掠。
前言
上一篇文章我們介紹了Python內(nèi)置數(shù)據(jù)類型中幾個屬于數(shù)字的數(shù)據(jù)類型疯潭。這篇文章就開始介紹序列類型竖哩。本文首先會介紹序列的基本概念和通用的方法相叁,接著會介紹Python中的字符串的概念和基本用法增淹。
序列
序列是什么虑润?
序列(sequence)指的是一塊可存放多個元素的內(nèi)存空間拳喻,這些元素按照一定的順序排列冗澈。每個元素都有自己的位置(索引)渗柿,可以通過這些位置(索引)來找到指定的元素朵栖。如果將序列想象成一個酒店陨溅,那么酒店里的每個房間就相當于序列中的每個元素门扇,房間的編號就相當于元素的索引,可以通過編號(索引)找到指定的房間(元素)溜宽。
有哪些序列類型呢适揉?
了解完了序列的基本概念煤惩,那么在Python中一共有哪些序列類型呢魄揉?如下圖所示:
從圖中可以看出在Python中共有7種序列類型瓣俯,分別是文本序列類型(str);二進制序列類型 bytes和bytearray;列表(list)驻仅;元組(tuple);集合類型(set和frozenset)粘优;范圍類型(range)以及字典類型(dict)雹顺。
1. 按照能存儲的元素劃分
按照能存儲的元素可以將序列類型劃分為兩大類:分別是:容器序列和扁平序列
容器序列:即可容納不同數(shù)據(jù)類型的元素的序列嬉愧;有 list;tuple裕便;set偿衰;dict
舉個栗子:
list=['runoob',786,2.23,'john',70.2]
這里的list保存的元素有多種數(shù)據(jù)類型哎垦,既有字符串漏设,也有小數(shù)和整數(shù)鸳碧。
扁平序列:即只能容納相同數(shù)據(jù)類型的元素的序列;有bytes套利;str;bytearray喊衫,以str為例,同一個str只能都存儲字符。
2. 按照是否可變劃分
按照序列是否可變朝墩,又可分為可變序列和不可變序列。
這里的可變的意思是:序列創(chuàng)建成功之后排吴,還能不能進行修改操作,比如插入街氢,修改等等,如果可以的話則是可變的序列伦乔,如果不可以的話則是不可變序列皿淋。
可變序列有列表( list)沥匈;字典(dict)等,
不可變的序列有元祖(tuple)散址,后面的文章會詳細的對這些數(shù)據(jù)類型做詳細介紹。
序列都有哪些方法以及特性呢?
序列的索引
在介紹序列概念的時候贡翘,說到了序列中元素的索引,那么什么是序列的索引呢北滥?其實就是位置的下標。 如果對C語言中的數(shù)組有所了解的話济赎,我們知道數(shù)組的索引下標都是從0開始依次遞增的正數(shù)辙纬,即第一個元素的索引下標是0蓖谢,第n個元素的索引下標是n-1闪幽。序列的索引也是同理陨瘩,默認情況下都是從左向右記錄索引舌劳,索引值從0開始遞增大诸,即第一個元素的元素的索引值是0,第n個元素的索引值是n-1盈厘。如下圖所示:
當然與C語言中數(shù)組不同的是注簿,Python還支持索引值是負數(shù)捐晶,該類的索引是從右向左計數(shù)。換句話說眼耀,就是從最后一個元素開始計數(shù),從索引值-1開始遞減池凄,即第n個元素的索引值是-1,第1個元素的索引值是-n柏副,如下圖所示:
序列切片
切片操作是訪問序列元素的另一種方式萎河,它可以訪問一定范圍內(nèi)的元素玛歌,通過切片操作,可以生成一個新的序列。切片操作的語法格式是:
sname[start : end : step]
各個參數(shù)的含義分別是:
- sname: 表示序列的名稱
- start:表示切片的開始索引位置(包括該位置)昨登,此參數(shù)也可以不指定禽捆,不指定的情況下會默認為0琐凭,也就是從序列的開頭開始切片淘正。
- end:表示切片的結束索引位置(不包括該位置)述呐,如果不指定思犁,則默認為序列的長度激蹲。
- step: 表示步長乘瓤,即在切片過程中,隔幾個存儲位置(包括當前位置)取一次元素,也就是說聪建,如果step的值大于1,比如step為3時,則在切片取元素時见秽,會隔2個位置去取下一個元素。
還是舉個栗子說明下吧:
str1='好好學習禀苦,天天向上'
# 取出索引下標為7的值
print(str1[7])
# 從下標0開始取值秉扑,一直取到下標為7(不包括)的索引值
print(str1[0:7])
# 從下標1開始取值误澳,一直取到下標為4(不包括)的索引值,因為step等于2陪毡,所以會隔1個元素取值
print(str1[1:4:2])
# 取出最后一個元素
print(str1[-1])
# 從下標-9開始取值妙色,一直取到下標為-2(不包括)的索引值
print(str1[-9:-2])
運行的結果是:
向
好好學習丐谋,天天
好習
上
好好學習,天天
序列相加
Python支持類型相同的兩個序列使用"+"
運算符做想加操作吏饿,它會將兩個序列進行連接,但是不會去除重復的元素畴博,即只做一個簡單的拼接。
str='他叫小明'
str1='他很聰明'
print(str+str1)
運行結果是:他叫小明他很聰明
序列相乘
Python支持使用數(shù)字n乘以一個序列途凫,其會生成一個新的序列,新序列的內(nèi)容是原序列被重復了n次的結果。
str2='你好呀'
print(str2*3)
運行結果是:你好呀你好呀你好呀
,原序列的內(nèi)容重復了3次恶阴。
檢查元素是否包含在序列中
Python中可以使用in
關鍵字檢查某個元素是否為序列中的成員,其語法格式為:
value in sequence
其中缓熟,value表示要檢查的元素吕世,sequence表示指定的序列况毅。
舉個栗子:查找天
字是否在字符串str1中。
str1='好好學習母债,天天向上'
print('天' in str1)
運行結果是:True
序列相關的內(nèi)置函數(shù)
函數(shù) | 功能 | 適用場景 | |
---|---|---|---|
len() | 計算序列的長度,即返回序列中包含了多少個元素 | 適用于列表,元組红氯、字典茉贡、集合放椰、字符串等 | |
max() | 找出序列中的最大元素拿撩,針對序列中元素是數(shù)字的情況 。 | 適用于列表坤检,元組倾芝、字典、集合谱姓、range等 | |
min() | 找出序列中的最小元素屉来,針對序列中元素是數(shù)字的情況 | 適用于列表,元組茂契、字典慨绳、集合脐雪、range等 | |
list() | 將序列轉換為列表 | 適用于字符串 | |
str() | 將序列轉換為字符串 | 適用于列表,元組召锈,數(shù)字 | |
sum() | 對序列中的元素求和获询,注意,對序列使用sum()函數(shù)時蹬铺,做加和操作的必須全部是數(shù)字秉撇,不能是字符或者字符串瘦麸,因為解釋器無法判定事要做連接操作屠缭,還是做加和操作 | 適用于列表逢并,元組蟹肘、集合阳欲、range等 | |
sorted() | 對元素進行排序 | 適用于列表赴蝇,元組考余、字典鳄袍、集合哀九、range蝇更,字符串等 | |
reversed() | 反向序列中的元素 | 適用于列表厨幻,元組捏雌、字典肤频、集合、range,字符串等 | |
enumerate() | 枚舉列表元素宵膨,返回枚舉對象,其中每個元素包含下標和值的元組。該函數(shù)對元組/字符串同樣有效贺待。 | 適用于列表奥此,元組蠢终、字典帕识、集合、range忆蚀,字符串等 |
依然是舉例說明:
str3='碼農(nóng)飛哥'
print('字符串的長度=',len(str3))
print('轉成列表=',list(str3))
print('調(diào)用enumerate函數(shù)',enumerate(str3))
print('遍歷enumerate函數(shù)的結果:')
for item in enumerate(str3):
print(item)
print('遍歷reversed函數(shù)的結果:')
for item in reversed(str3):
print(item)
list2=['碼農(nóng)','飛哥']
print('列表轉字符串=',str(list2))
list1=[12,20,5,8,1]
print('最大值=',max(list1))
print('最小值=',min(list1))
print('求和結果=',sum(list1))
print('排序結果=',sorted(list1))
運行結果是:
字符串的長度= 4
轉成列表= ['碼', '農(nóng)', '飛', '哥']
調(diào)用enumerate函數(shù) <enumerate object at 0x7f90818cd540>
遍歷enumerate函數(shù)的結果:
(0, '碼')
(1, '農(nóng)')
(2, '飛')
(3, '哥')
遍歷reversed函數(shù)的結果:
哥
飛
農(nóng)
碼
列表轉字符串= ['碼農(nóng)', '飛哥']
最大值= 20
最小值= 1
求和結果= 46
排序結果= [1, 5, 8, 12, 20]
字符串
前面介紹序列時溃睹,大部分例子都是用字符串來表示的商佑,那么就來認識一下字符串吧!
字符串的定義
由若干個字符組成的集合就是一個字符串(str)探入,Python中的字符串必須由雙引號""或者單引號''包圍。其語法格式是:
"字符串內(nèi)容"
'字符串內(nèi)容'
如果字符串中包含了單引號需要做特殊處理泡躯。比如現(xiàn)在有這樣一個字符串
str4='I'm a greate coder'
直接這樣寫有問題的。
處理的方式有兩種:
- 對引號進行轉義降传,通過轉義符號
\
進行轉義即可:
str4='I\'m a greate coder'
- 使用不同的引號包圍字符串
str4="I'm a greate coder"
這里外層用雙引號翼悴,包裹字符串里的單引號陪踩。
原始字符串的處理
有時候我們并不想字符串被轉義,這種情況下可以使用在字符串的開頭加上r前綴杭措,就變成了原始字符串,具體格式是:
str1 = r'原始字符串內(nèi)容'
str2 = r"原始字符串內(nèi)容"
舉個例子吧:
str4=r'碼農(nóng)\'飛哥真棒'
str5=r"碼農(nóng)\'飛哥真棒"
print(str4)
print(str5)
運行結果是:
碼農(nóng)\'飛哥真棒
碼農(nóng)\'飛哥真棒
字符串的分割方法
在實際開發(fā)中,我們經(jīng)常要根據(jù)文件名獲取文件的后綴名鸟悴,這該如何處理呢猩系?
path = "test_user_info.py"
現(xiàn)在要提取后綴名py
峰尝,其實可以通過split方法,將字符串分割成列表(list)票编,然后從列表中取值互订,就像下面這樣:
suffix = path.split(".")[1]
print("suffix: {}".format(suffix))
字符串拼接的方法
字符串拼接的方法有三種折联,分別是:
- 通過join方法
通過join方法的語法格式是str.join(iterable)
抠艾,其中join的條件是 iterable可迭代的凹蜂,并且列表元素是字符串(str)。就是對iterable中的每個元素進行遍歷粟瞬,然后拼接到str上,這里的str是用于指定合并時的分隔符速客,如果想拼接之后的字符串是逗號分割点待,那么寫法是 - 通過format方法
format 方法是通過占位符占據(jù)要拼接的字符串的位置。 - 通過
+
運算符
現(xiàn)有字符串碼農(nóng)飛哥好吧黄,
,要求將字符串碼農(nóng)飛哥牛逼
拼接到其后面,生成新的字符串碼農(nóng)飛哥好证逻,碼農(nóng)飛哥牛逼
str6 = '碼農(nóng)飛哥好,'
# 使用+ 運算符號
print('+運算符拼接的結果=',(str6 + '碼農(nóng)飛哥牛逼'))
#使用join拼接字符串
list2 = ['碼', '農(nóng)', '飛', '哥', '牛', '逼']
print('無符號分割join的拼接結果=', ''.join(list2))
print('逗號分割join的拼接結果=', ','.join(list2))
# 使用format拼接
str7 = str6 + '{0}'
print('format拼接的結果=',str7.format('碼農(nóng)飛哥牛逼'))
str8=str6+'{0}{1}'
print('format拼接的結果=',str8.format('碼農(nóng)飛哥','牛逼'))
運行結果是;
+運算符拼接的結果= 碼農(nóng)飛哥好今布,碼農(nóng)飛哥牛逼
無符號分割join的拼接結果= 碼農(nóng)飛哥牛逼
逗號分割join的拼接結果= 碼,農(nóng),飛,哥,牛,逼
format拼接的結果= 碼農(nóng)飛哥好份蝴,碼農(nóng)飛哥牛逼
format拼接的結果= 碼農(nóng)飛哥好,碼農(nóng)飛哥牛逼
大家想想如果還直接使用str6.join('碼農(nóng)飛哥牛逼')
最后的輸出結果是啥呢扒袖?
str6 = '碼農(nóng)飛哥好,'
print(str6.join('碼農(nóng)飛哥牛逼'))
print(str6)
運行結果是
碼碼農(nóng)飛哥好,農(nóng)碼農(nóng)飛哥好纵潦,飛碼農(nóng)飛哥好经磅,哥碼農(nóng)飛哥好,牛碼農(nóng)飛哥好,逼
碼農(nóng)飛哥好,
就是將碼農(nóng)飛哥牛逼
遍歷奠支,然后每個字符拼接到str6前面烙常,所以前面的 str6是作為一個拼接的分隔符號的洛心。
需要特別注意的是拼接后的字符串是新的字符串墓塌,而不是在原有的字符串上修改哀峻。所以我們看到原字符串str6在拼接后并沒有改變。這個特新跟Java中的String是一樣,那么有小伙伴知道str不可變的原因的?歡迎留言哦。
所以在遍歷拼接字符串的時候要特別注意賦值温亲,就像這樣:
list = ['碼', '農(nóng)', '飛', '哥', '牛', '逼']
str_list = str("")
for str1 in list:
str_list = str_list + "file {0}\n".format(str1)
print(str_list)
總結
本文詳細介紹了Python內(nèi)置數(shù)據(jù)類型中的序列類型泌射,介紹了序列的基本概念翼抠,序列就是一塊存儲多個元素的內(nèi)存空間丐膝,這些元素按照一定的順序排列凛俱,介紹了序列的通性,可以把序列當成其他語言中的數(shù)組躺苦,可以把序列想象成一個酒店匕累。序列通過索引來查找里面的值陵刹。最后介紹了字符串,希望對讀者朋友們有所幫助欢嘿。
牛刀小試一下吧
現(xiàn)有如下的字符串
str6='程序猿正在創(chuàng)造世界'
- 如何根據(jù)str6輸出結果為
正創(chuàng)
的字符串衰琐? - 如何根據(jù)str6輸出結果為
界世造創(chuàng)的默默猿序程
的字符串呢?
歡迎知道的小伙伴踴躍留言炼蹦,我們一起交流討論羡宙。參考答案詳見文尾:
參考答案
現(xiàn)有如下的字符串
str6='程序猿正在創(chuàng)造世界'
- 如何根據(jù)str6輸出結果為
正創(chuàng)
的字符串? - 如何根據(jù)str6輸出結果為
界世造創(chuàng)的默默猿序程
的字符串呢掐隐?
這里主要考察的是字符串的切片以及字符串的拼接等知識點狗热。這里還用到了反轉函數(shù)瑟枫。
- 答案一:
str6 = '程序猿正在創(chuàng)造世界'
# 索引的坐標是從0開始的斗搞,3表示取第4個字符串指攒,6表示到第七個字符串(不包括)慷妙,步長是2
print(str6[3:6:2])
# 首先獲取反轉之后的字符串
str2 = ''.join(reversed(str6))
#將字符串拼接成我們想要的字符
print(str2[0:4] + '的默默' +str2[6:9])
- 答案二:
str6 = '程序猿正在創(chuàng)造世界'
# 第一題
print(str6[3]+str6[5])
# 第二題
str6=str6[0:3]+str6[5:]
list2 = list(reversed(str6))
list2.insert(4, '的默默')
print(''.join(list2))
我是碼農(nóng)飛哥,再次感謝您讀完本文允悦。
全網(wǎng)同名【碼農(nóng)飛哥】膝擂。不積跬步,無以至千里隙弛,享受分享的快樂
我是碼農(nóng)飛哥架馋,再次感謝您讀完本文。