本篇主要描述了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')
字典
字典的定義
字典定義的方式比較多鼠次,以下列出其中幾種方法
- 構(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}
- 直接構(gòu)建非空字典
>>> d2={"name":"username",'age':18,'list':["item1","item2"]}
>>> type(d2)
<class 'dict'>
>>> d2
{'name': 'username', 'age': 18, 'list': ['item1', 'item2']}
- 使用元組構(gòu)建字典
>>> t3=(["key1","value1"],["key2","value2"])
>>> d3=dict(t3)
>>> d3
{'key1': 'value1', 'key2': 'value2'}
>>> type(d3)
<class 'dict'>
- 直接使用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()