【Python從入門到精通】(五)Python內(nèi)置的數(shù)據(jù)類型-序列和字符串遍蟋,沒有女友匿值,不是保姆,只有拿來就能用的干貨

您好钟些,我是碼農(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ù)的含義分別是:

  1. sname: 表示序列的名稱
  2. start:表示切片的開始索引位置(包括該位置)昨登,此參數(shù)也可以不指定禽捆,不指定的情況下會默認為0琐凭,也就是從序列的開頭開始切片淘正。
  3. end:表示切片的結束索引位置(不包括該位置)述呐,如果不指定思犁,則默認為序列的長度激蹲。
  4. 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' 直接這樣寫有問題的。
處理的方式有兩種:

  1. 對引號進行轉義降传,通過轉義符號\進行轉義即可:
str4='I\'m a greate coder'
  1. 使用不同的引號包圍字符串
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))

字符串拼接的方法

字符串拼接的方法有三種折联,分別是:

  1. 通過join方法
    通過join方法的語法格式是str.join(iterable)抠艾,其中join的條件是 iterable可迭代的凹蜂,并且列表元素是字符串(str)。就是對iterable中的每個元素進行遍歷粟瞬,然后拼接到str上,這里的str是用于指定合并時的分隔符速客,如果想拼接之后的字符串是逗號分割点待,那么寫法是
  2. 通過format方法
    format 方法是通過占位符占據(jù)要拼接的字符串的位置。
  3. 通過+運算符
    現(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)造世界'
  1. 如何根據(jù)str6輸出結果為正創(chuàng) 的字符串衰琐?
  2. 如何根據(jù)str6輸出結果為界世造創(chuàng)的默默猿序程的字符串呢?
    歡迎知道的小伙伴踴躍留言炼蹦,我們一起交流討論羡宙。參考答案詳見文尾:

參考答案

現(xiàn)有如下的字符串

str6='程序猿正在創(chuàng)造世界'
  1. 如何根據(jù)str6輸出結果為正創(chuàng) 的字符串?
  2. 如何根據(jù)str6輸出結果為界世造創(chuàng)的默默猿序程的字符串呢掐隐?

這里主要考察的是字符串的切片以及字符串的拼接等知識點狗热。這里還用到了反轉函數(shù)瑟枫。

  1. 答案一:
str6 = '程序猿正在創(chuàng)造世界'
# 索引的坐標是從0開始的斗搞,3表示取第4個字符串指攒,6表示到第七個字符串(不包括)慷妙,步長是2
print(str6[3:6:2])
# 首先獲取反轉之后的字符串
str2 = ''.join(reversed(str6))
#將字符串拼接成我們想要的字符
print(str2[0:4] + '的默默' +str2[6:9])
  1. 答案二:
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)飛哥架馋,再次感謝您讀完本文

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末全闷,一起剝皮案震驚了整個濱河市叉寂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌总珠,老刑警劉巖屏鳍,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勘纯,死亡現(xiàn)場離奇詭異,居然都是意外死亡钓瞭,警方通過查閱死者的電腦和手機驳遵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來山涡,“玉大人堤结,你說我怎么就攤上這事⊙即裕” “怎么了竞穷?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長系吩。 經(jīng)常有香客問我来庭,道長,這世上最難降的妖魔是什么穿挨? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任月弛,我火速辦了婚禮,結果婚禮上科盛,老公的妹妹穿的比我還像新娘帽衙。我一直安慰自己,他們只是感情好贞绵,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布厉萝。 她就那樣靜靜地躺著,像睡著了一般榨崩。 火紅的嫁衣襯著肌膚如雪谴垫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天母蛛,我揣著相機與錄音翩剪,去河邊找鬼。 笑死彩郊,一個胖子當著我的面吹牛前弯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秫逝,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恕出,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了违帆?” 一聲冷哼從身側響起浙巫,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刷后,沒想到半個月后的畴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廉油,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年苗傅,在試婚紗的時候發(fā)現(xiàn)自己被綠了抒线。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渣慕,死狀恐怖嘶炭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逊桦,我是刑警寧澤眨猎,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站强经,受9級特大地震影響睡陪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匿情,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一兰迫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炬称,春花似錦汁果、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跷车,卻和暖如春棘利,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朽缴。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工善玫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人不铆。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓蝌焚,卻偏偏與公主長得像裹唆,于是被迫代替她去往敵國和親誓斥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容