Python中的字符串靶草、列表蹄胰、元組、字典爱致、集合

本篇主要描述了Python中的字符串(str)烤送、列表(str)、元組(tuple)糠悯、字典(dict)帮坚、集合(set)的特點(diǎn)以及使用

字符串(str)

字符串的定義

定義字符串可以使用單引號',雙引號",三單引號''',三雙引號""",如下圖

定義字符串

使用三單引號'''或三雙引號"""可以實(shí)現(xiàn)多行文本

字符串的連接

Python中的字符串連接可以使用+號來實(shí)現(xiàn)

連接字符串

但是+號只能夠連接兩個字符串互艾,如果要實(shí)現(xiàn)字符串與其他類型的值連接试和,例如int型,則需要把int數(shù)據(jù)通過str()函數(shù)或者是repr()函數(shù)將int數(shù)據(jù)轉(zhuǎn)為字符串后才能夠?qū)崿F(xiàn)連接纫普,如下圖
連接字符串

轉(zhuǎn)義字符

轉(zhuǎn)義字符并不是只有Python才有的阅悍,跟其他語言一樣好渠,Python可以使用轉(zhuǎn)義字符來表示一些特殊的字符,下表是一些常用的轉(zhuǎn)義字符

轉(zhuǎn)義字符 描述
\(在行尾時) 續(xù)行符
\\ 反斜杠符號
' 單引號
" 雙引號
\a 響鈴
\b 退格(Backspace)
\000
\n 換行
\v 縱向制表符
\t 橫向制表符
\r 回車
\f 換頁
\oyy 八進(jìn)制數(shù)节视,yy代表的字符拳锚,例如:\o12代表換行
\xyy 十六進(jìn)制數(shù),yy代表的字符寻行,例如:\x0a代表換行
\other 其它的字符以普通格式輸出

索引和切片

字符串是由一個或多個字符組成的有序的值霍掺,如下圖,0就是字符串p的索引,字母i的索引就是7,索引可以從左到又拌蜘,索引值從0開始杆烁,也可以從右到左,索引值從-1開始

>>> s6='python is good'
>>> s6[1]
'y'
>>> s6.index('I')
7

如果需要截取字符串中的部分字符串简卧,截取出來的可以稱之為切片

>>> s6[2:11]
'thon is g'
>>> s6[2:]
'thon is good'
>>> s6[:7]
'python '
>>> s6[:99]
'python is good'
>>> s6[-8:-4]
' is '
>>> s6[-8:]
' is good'
>>> s6[:-4]
'python is '
>>> s6[1:11:2]
'yhni '
  • s6[2:11]表示字符串s6取索引值為2-10的字符
  • s6[2:]表示取索引值為2之后的字符
  • s6[:7]表示取索引值為7之前的字符
  • s6[:99]當(dāng)索引值超出之后兔魂,則會取得所有字符,但是并不提倡這樣做
  • s6[-8:-4]表示從右到左举娩,取-8到-4之間到字符其實(shí)s6[-8:-4]=s6[len(s6)-8:len(s6)-4]=s6[14-8:14-4]=s6[6:10]
  • s6[-8:]表示從右到左析校,取索引值為-8之后到所有字符
  • s6[:-4]表示從右到左取索引值為-4之前到所有字符
  • s6[1:11:2]表示取索引值為1-10之間的字符,步長為2

列表(list)

列表的定義

在Python中晓铆,列表使用方括號[]定義勺良,相對其他語言,Python的列表中元素并不會限定必須類型統(tǒng)一,列表的內(nèi)容可以是字符串骄噪,數(shù)字,甚至是一個列表蠢箩,元組链蕊,字典或者是集合

>>> l1=[]
>>> l1.append(1)
>>> l1.append("str")
>>> l1.append(["list1","list2"])
>>> l1.append(("123",123))
>>> l1.append({"456":456})
>>> l1.append(set('test'))
>>> l1
[1, 'str', ['list1', 'list2'], ('123', 123), {'456': 456}, {'s', 'e', 't'}]
>>> type(l1[0])
<class 'int'>
>>> type(l1[1])
<class 'str'>
>>> type(l1[2])
<class 'list'>
>>> type(l1[3])
<class 'tuple'>
>>> type(l1[4])
<class 'dict'>
>>> type(l1[5])
<class 'set'>

索引和切片

列表和字符串一樣,都有索引和切片谬泌,但與字符串不同但是滔韵,列表但索引得到但是列表中的一個項(xiàng)

>>> l1[0]
1
>>> l1[1]
'str'
>>> l1[2:4]
[['list1', 'list2'], ('123', 123)]
>>> l1[:4]
[1, 'str', ['list1', 'list2'], ('123', 123)]
>>> l1[2:]
[['list1', 'list2'], ('123', 123), {'456': 456}, {'s', 'e', 't'}]
>>> l1[-1:]
[{'s', 'e', 't'}]
>>> l1[:-1]
[1, 'str', ['list1', 'list2'], ('123', 123), {'456': 456}]

列表的操作

列表的反轉(zhuǎn)

列表反轉(zhuǎn)在實(shí)際編程中也是比較常見的,可以通過以下方式對列表進(jìn)行反轉(zhuǎn)
reverse()會將列表內(nèi)容進(jìn)行反轉(zhuǎn)

>>> l1
[1, 'str', ['list1', 'list2'], ('123', 123), {'456': 456}, {'s', 'e', 't'}]
>>> l1[::-1]
[{'s', 'e', 't'}, {'456': 456}, ('123', 123), ['list1', 'list2'], 'str', 1]
>>> list(reversed(l1))
[{'s', 'e', 't'}, {'456': 456}, ('123', 123), ['list1', 'list2'], 'str', 1]
>>> l1
[1, 'str', ['list1', 'list2'], ('123', 123), {'456': 456}, {'s', 'e', 't'}]
>>> l1.reverse()
>>> l1
[{'s', 'e', 't'}, {'456': 456}, ('123', 123), ['list1', 'list2'], 'str', 1]

列表的長度掌实,最大值陪蜻,最小值,添加贱鼻,刪除

在列表中宴卖,可以通過len()獲取列表的長度,通過max()獲取列表的最大值,min()獲取列表的最小值邻悬,append()函數(shù)進(jìn)行列表的增加數(shù)據(jù)症昏,insert()函數(shù)添加到列表中到指定位置,remove()函數(shù)刪除某個項(xiàng),pop()可以刪除最后一項(xiàng),可以通過*重復(fù)列表中的數(shù)據(jù)

>>> l2=[5,1,9,2,9,3,1,4,7,5,6,7,9]
>>> len(l2)
8
>>> max(l2)
9
>>> min(l2)
1
>>> l2.append("addItem")
>>> l2.remove("addItem")
>>> l2.insert(0,99)
>>> l2
[99, 5, 1, 9, 2, 9, 3, 1, 4, 7, 5, 6, 7, 9]
>>> l2.pop()
9
>>> l2*2
[99, 5, 1, 9, 2, 9, 3, 1, 4, 7, 5, 6, 7, 99, 5, 1, 9, 2, 9, 3, 1, 4, 7, 5, 6, 7]

列表的連接

列表可以通過+號進(jìn)行連接父丰,可以使用extend()將一個列表的內(nèi)容添加到另一個列表中,通過以下代碼可以得知肝谭,使用+號操作并不會改變原列表到值,使用extend()則會將原列表到值改變了

>>> l2
[5, 1, 9, 2, 9, 3, 1, 4, 7, 5, 6, 7]
>>> l3
['l3-1', 'l3-2']
>>> l2+l3
[5, 1, 9, 2, 9, 3, 1, 4, 7, 5, 6, 7, 'l3-1', 'l3-2']
>>> l2
[5, 1, 9, 2, 9, 3, 1, 4, 7, 5, 6, 7]
>>> l3
['l3-1', 'l3-2']
>>> l2.extend(l3)
>>> l2
[5, 1, 9, 2, 9, 3, 1, 4, 7, 5, 6, 7, 'l3-1', 'l3-2']

元組

在Python中元組跟列表有點(diǎn)相似,但又有其特殊性攘烛,列表是可以增加修改刪除的魏滚,但是元組是不可變的,不能夠進(jìn)行增加傷處修改等操作

元組的定義

>>> t1=123,'abc',['aaa']
>>> type(t1)
<class 'tuple'>
>>> t2=(123,'abc',['aaa'])
>>> type(t2)
<class 'tuple'>

索引和切片

因?yàn)樵M跟list相似,且元組也是有序等坟漱,所以元組也有索引和切片

>>> t3=(123,'abc',['aaa'],{"asda","test"},3.3)
>>> t3[0]
123
>>> t3[1:]
('abc', ['aaa'], {'test', 'asda'}, 3.3)
>>> t3[:-3]
(123, 'abc')

字典

字典的定義

字典定義的方式比較多鼠次,以下列出其中幾種方法

  1. 構(gòu)建空字典,然后向里面添加數(shù)據(jù)
>>> d1={}
>>> type(d1)
<class 'dict'>
>>> d1[1]=123
>>> d1['2']="456"
>>> d1["a"]=789
>>> d1
{1: 123, '2': '456', 'a': 789}
  1. 直接構(gòu)建非空字典
>>> d2={"name":"username",'age':18,'list':["item1","item2"]}
>>> type(d2)
<class 'dict'>
>>> d2
{'name': 'username', 'age': 18, 'list': ['item1', 'item2']}
  1. 使用元組構(gòu)建字典
>>> t3=(["key1","value1"],["key2","value2"])
>>> d3=dict(t3)
>>> d3
{'key1': 'value1', 'key2': 'value2'}
>>> type(d3)
<class 'dict'>
  1. 直接使用key=value方式構(gòu)建
>>> d4=dict(id='1',age=1,name='test')
>>> type(d4)
<class 'dict'>
>>> d4
{'id': '1', 'age': 1, 'name': 'test'}

字典的操作

  • d[key]可以得到字典對應(yīng)key的值靖秩,當(dāng)key不存在則報錯
  • d[key]=value將value付給字典對應(yīng)key
  • len(d)返回字典中鍵值對的數(shù)量
  • key in d 檢查字典中是否含有鍵為key的值
  • del d[key]刪除字典中含有鍵為key的像
  • d.get(key,defaultvalue)可以獲取字典中對應(yīng)key的值须眷,當(dāng)key不存在時,如果defaultvalue沒有傳沟突,則返回None花颗,否則返回defaultvalue
  • d.setdefault(key,defaultvalue)如果字典中不存在對應(yīng)的key,則添加對應(yīng)的key惠拭,defaultvalue不填時扩劝,value為None,否則為defaultvalue
  • d.clear()清空字典里面的內(nèi)容
  • pop(key)popitem()都可以刪除字典中的內(nèi)容职辅,pop需要傳入對應(yīng)的key棒呛,popitem則隨機(jī)刪除一對鍵值對
>>> d4['id']
'1'
>>> d4['id']=2
>>> len(d4)
3
>>> 'id' in d4
True
>>> d4
{'id': 2, 'age': 1, 'name': 'test'}
>>> del d4['id']
>>> d4
{'age': 1, 'name': 'test'}
>>> d4.get('age')
1
>>> d4.get('id')
>>> d4.get('id','-1')
'-1'
>>> d4
{'age': 1, 'name': 'test'}
>>> d4.setdefault('id')
>>> d4
{'age': 1, 'name': 'test', 'id': None}
>>> d4.setdefault('id1',1)
1
>>> d4
{'age': 1, 'name': 'test', 'id': None, 'id1': 1}
>>> d4.clear()
>>> d4
{}
>>> d5={'id': 2, 'age': 1, 'name': 'test',1:999,2:666,3:777}
>>> d5.pop('id')
2
>>> d5
{'age': 1, 'name': 'test', 1: 999, 2: 666, 3: 777}
>>> d5.popitem()
(3, 777)
>>> d5
{'age': 1, 'name': 'test', 1: 999, 2: 666}

字典的copy

字典可以通過copy()方法進(jìn)行拷貝,且對其中的一個簡直對進(jìn)行修改并不會影響到原來的字典

>>> d6={1:1,2:2.2,'3':'3','l':[123,'123','456']}
>>> d6
{1: 1, 2: 2.2, '3': '3', 'l': [123, '123', '456']}
>>> d7=d6.copy()
>>> d7
{1: 1, 2: 2.2, '3': '3', 'l': [123, '123', '456']}
>>> d7[1]='999'
>>> d7
{1: '999', 2: 2.2, '3': '3', 'l': [123, '123', '456']}
>>> d6
{1: 1, 2: 2.2, '3': '3', 'l': [123, '123', '456']}

但是如果如果是修改列表的話域携,那么就會出現(xiàn)兩個字典的列表內(nèi)容一起修改了簇秒,因?yàn)檫@種拷貝只是淺拷貝,兩個字典中的列表地址其實(shí)是一樣的

>>> d7['l'].append(74125)
>>> d7
{1: '999', 2: 2.2, '3': '3', 'l': [123, '123', '456', 74125]}
>>> d6
{1: 1, 2: 2.2, '3': '3', 'l': [123, '123', '456', 74125]}
>>> id(d6['l'])
4540976712
>>> id(d7['l'])
4540976712

如果需要實(shí)現(xiàn)深拷貝秀鞭,則需要導(dǎo)入copy模塊趋观,使用deepcopy()函數(shù)進(jìn)行深拷貝

>>> d7
{1: '999', 2: 2.2, '3': '3', 'l': [123, '123', '456', 74125]}
>>> import copy
>>> d8=copy.deepcopy(d7)
>>> d8
{1: '999', 2: 2.2, '3': '3', 'l': [123, '123', '456', 74125]}
>>> d8['l'].append('append')
>>> d8
{1: '999', 2: 2.2, '3': '3', 'l': [123, '123', '456', 74125, 'append']}
>>> d7
{1: '999', 2: 2.2, '3': '3', 'l': [123, '123', '456', 74125]}

集合

集合的定義

以下為集合的定義方式,集合會自動去除重復(fù)的數(shù)據(jù)锋边,且集合中元素是無需的

>>> s1=set('fglsdfglsfghalerwer')
>>> s1
{'a', 'r', 'd', 'h', 'w', 's', 'e', 'g', 'f', 'l'}
>>> s2=set([1,2,58,1,5,6,7,8,6,9])
>>> s2
{1, 2, 5, 6, 7, 8, 9, 58}

集合的操作

  • 集合可以通過add()實(shí)現(xiàn)對集合的添加
  • 通過update()可以把一個集合里的數(shù)據(jù)添加到另一個集合里面
  • pop() 可以隨機(jī)的刪除集合中到一個元素
  • remove()可以刪除集合中指定元素皱坛,如果元素不存在則報錯
  • discard()可以刪除集合中指定元素,如果元素不存在則返回None
  • clear()可以清空集合所有元素
>>> s2.add('test')
>>> s2
{1, 2, 5, 6, 7, 8, 9, 'test', 58}
>>> s1
{'a', 'r', 'd', 'h', 'w', 's', 'e', 'g', 'f', 'l'}
>>> s1.update(s2)
>>> s1
{1, 2, 5, 6, 7, 'h', 8, 9, 'test', 'e', 'd', 'a', 'r', 'w', 's', 'g', 'f', 58, 'l'}
>>> s2
{1, 2, 5, 6, 7, 8, 9, 'test', 58}
>>> s1.pop()
1
>>> s1.remove('test')
>>> s1
{2, 5, 6, 7, 'h', 8, 9, 'e', 'a', 'w', 's', 'g', 58, 'd', 'r', 'f', 'l'}
>>> s1.discard('r')
>>> s1
{2, 5, 6, 7, 'h', 8, 9, 'e', 'a', 'w', 's', 'g', 58, 'd', 'f', 'l'}
>>> s1.clear()
>>> s1
set()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豆巨,一起剝皮案震驚了整個濱河市剩辟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌往扔,老刑警劉巖贩猎,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓤球,居然都是意外死亡融欧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門卦羡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來噪馏,“玉大人麦到,你說我怎么就攤上這事∏飞觯” “怎么了瓶颠?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刺桃。 經(jīng)常有香客問我粹淋,道長,這世上最難降的妖魔是什么瑟慈? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任桃移,我火速辦了婚禮,結(jié)果婚禮上葛碧,老公的妹妹穿的比我還像新娘借杰。我一直安慰自己,他們只是感情好进泼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布蔗衡。 她就那樣靜靜地躺著,像睡著了一般乳绕。 火紅的嫁衣襯著肌膚如雪绞惦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天洋措,我揣著相機(jī)與錄音济蝉,去河邊找鬼。 笑死菠发,一個胖子當(dāng)著我的面吹牛堆生,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雷酪,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涝婉!你這毒婦竟也來了哥力?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤墩弯,失蹤者是張志新(化名)和其女友劉穎吩跋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渔工,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锌钮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了引矩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梁丘。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡侵浸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氛谜,到底是詐尸還是另有隱情掏觉,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布值漫,位于F島的核電站澳腹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杨何。R本人自食惡果不足惜酱塔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望危虱。 院中可真熱鬧羊娃,春花似錦、人聲如沸槽地。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捌蚊。三九已至集畅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缅糟,已是汗流浹背挺智。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窗宦,地道東北人赦颇。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像赴涵,于是被迫代替她去往敵國和親媒怯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

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