Python的方括號(hào)、花括號(hào)和圓括號(hào)怎么使用

本篇內(nèi)容介紹了“Python的方括號(hào)、花括號(hào)和圓括號(hào)怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、富陽(yáng)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為富陽(yáng)等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

1. 方括號(hào)

方括號(hào)幾乎是所有編程語(yǔ)言的第一符號(hào)。這里的第一,并不是指使用頻率,而是指這個(gè)符號(hào)展現(xiàn)出的編程語(yǔ)言的內(nèi)涵和創(chuàng)造力。事實(shí)上,就符號(hào)的使用頻率而言,方括號(hào)也可能排在首位——只是我的直覺,并沒有統(tǒng)計(jì)數(shù)據(jù)支持。

1.1 創(chuàng)建列表

對(duì)于初學(xué)者來(lái)說(shuō),創(chuàng)建列表最常用的方法就是用一對(duì)方括號(hào)。

>>> a = []
>>> a
[]
>>> b = [3.14, False, 'x', None]
>>> b
[3.14, False, 'x', None]

即便是老鳥,也會(huì)大量使用方括號(hào)創(chuàng)建列表,尤其是使用推導(dǎo)式創(chuàng)建列表的情況下。

>>> c = [i**2 for i in range(5)]
>>> c
[0, 1, 4, 9, 16]

但我一直覺得,方括號(hào)就像口語(yǔ)或俚語(yǔ),太過(guò)隨便。我更喜歡使用嚴(yán)謹(jǐn)?shù)膌ist()來(lái)創(chuàng)建列表。使用list()創(chuàng)建列表,是list類的實(shí)例化的標(biāo)準(zhǔn)方法,可以體會(huì)list類的構(gòu)造函數(shù)如何適應(yīng)不同類型的參數(shù)。

>>> a = list()
>>> a
[]
>>> b = list((3.14
    
, False, 'x', None))
>>> b
[3.14, False, 'x', None]
>>> c = list({1,2,3})
>>> c
[1, 2, 3]
>>> d = list({'x':1,'y':2,'z':3})
>>> d
['x', 'y', 'z']
>>> e = list(range(5))
>>> e
[0, 1, 2, 3, 4]
>>> f = list('*'*i for i in range(5))
>>> f
['', '*', '**', '***', '****']

1.2 列表的索引

方括號(hào)可以創(chuàng)建列表,但方括號(hào)并不等同于列表,因?yàn)榉嚼ㄌ?hào)還用來(lái)索引。

>>> [3.14, False, 'x', None][2]
'x'
>>> [3.14, False, 'x', None][-2]
'x'
>>> [3.14, False, 'x', None][1:]
[False, 'x', None]
>>> [3.14, False, 'x', None][:-1]
[3.14, False, 'x']
>>> [3.14, False, 'x', None][::2]
[3.14, 'x']
>>> [3.14, False, 'x', None][::-1]
[None, 'x', False, 3.14]

列表的索引非常靈活,尤其是引入了負(fù)數(shù)索引,用-1表示最后一個(gè)元素或逆序,實(shí)屬喜大普奔。上面的操作,屬于常用索引方式,如果能讀懂下面的代碼,說(shuō)明你已經(jīng)具備了足夠深的功力。

>>> a = [3.14, False, 'x', None]
>>> a[2:2] = [1,2,3]
>>> a
[3.14, False, 1, 2, 3, 'x', None]

1.3 列表的方法

對(duì)于列表對(duì)象的方法如果能信手拈來(lái),那就是Python高手了。

>>> a = [3.14, False, 'x', None]
>>> a.index('x')
2
>>> a.append([1,2,3])
>>> a
[3.14, False, 'x', None, [1, 2, 3]]
>>> a[-1].insert(1, 'ok')
>>> a
[3.14, False, 'x', None, [1, 'ok', 2, 3]]
>>> a.remove(False)
>>> a
[3.14, 'x', None, [1, 'ok', 2, 3]]
>>> a.pop(1)
'x'
>>> a
[3.14, None, [1, 'ok', 2, 3]]
>>> a.pop()
[1, 'ok', 2, 3]
>>> a
[3.14, None]

2. 花括號(hào)

花括號(hào)代表字典對(duì)象,大多數(shù)初學(xué)者都這樣認(rèn)為。然而,這是錯(cuò)誤的,至少是片面的。下面的代碼中,a和b都是用花括號(hào)創(chuàng)造出來(lái)的對(duì)象,卻一個(gè)是字典,一個(gè)是集合。

>>> a = {}
>>> a
{}
>>> b = {'x','y','z'}
>>> b
{'y', 'z', 'x'}
>>> type(a)
<class 'dict'>
>>> type(b)
<class 'set'>

原來(lái),Python用花括號(hào)表示字典和集合兩種對(duì)象:花括號(hào)內(nèi)是空的,或者是鍵值對(duì)的,表示字典;花括號(hào)內(nèi)是無(wú)重復(fù)元素的,表示集合。為了不引起誤會(huì),我習(xí)慣用dict()來(lái)生成字典,用set()來(lái)生成集合。

>>> dict()
{}
>>> dict({'x':1, 'y':2, 'z':3})
{'x': 1, 'y': 2, 'z': 3}
>>> dict((('x',1), ('y',2), ('z',3)))
{'x': 1, 'y': 2, 'z': 3}
>>> dict.fromkeys('xyz')
{'x': None, 'y': None, 'z': None}
>>> dict.fromkeys('abc', 0)

    
{'a': 0, 'b': 0, 'c': 0}
>>> set((3,4,5))
{3, 4, 5}
>>> set({'x':1, 'y':2, 'z':3})
{'y', 'z', 'x'}
>>> set([3,3,4,4,5,5])
{3, 4, 5}

編碼實(shí)踐中,雖然在某些情況下集合是無(wú)可替代的,但集合的使用頻率是“四大金剛”中最低的,我們這里不展開討論,只說(shuō)說(shuō)字典的使用技巧。

2.1 判斷一個(gè)鍵是否存在于字典中

Py2時(shí)代,dict對(duì)象曾經(jīng)有has_key()的方法,用來(lái)判斷是否包含某個(gè)鍵。py3舍棄了這個(gè)方法,判斷一個(gè)鍵是否存在于字典中,只能使用in這樣的方法了。

>>> a = dict({'x':1, 'y':2, 'z':3})
>>> 'x' in a
True
>>> 'v' in a
False

2.2 向字典中添加一個(gè)新鍵或更新鍵值

很多人喜歡用對(duì)字典的一個(gè)鍵賦值的方法,實(shí)現(xiàn)向字典中添加一個(gè)新鍵或更新鍵值。

>>> a = dict()

    
>>> a['name'] = 'xufive'
>>> a
{'name': 'xufive'}

我不推薦這樣的方式,使用update()才更有儀式感,還可以一次添加或修改多個(gè)鍵。

>>> a = dict()
>>> a.update({'name':'xufive', 'gender':'男'})
>>> a
{'name': 'xufive', 'gender': '男'}

2.3 從字典中獲取一個(gè)鍵值

a['age']是最常用的方式,但是也還會(huì)遇到鍵不存在的異常。下面的方法值得推薦。

>>> a.get('age', 18)
18

2.4 獲取字典的全部鍵、全部值、全部鍵值對(duì)

dict類提供了keys()、values()和items()等三個(gè)方法分別返回字典的全部鍵、全部值和全部鍵值對(duì)。需要注意的是,返回結(jié)果并非列表,而是迭代器。如果你需要列表形式的返回結(jié)果,請(qǐng)使用list()轉(zhuǎn)換。

>>> a = dict()
>>> a.update({'name':'xufive', 'gender':'男'})
>>> list(a.keys())
['name', 'gender']
>>> list(a.values())
['xufive', '男']
>>> list(a.items())
[('name', 'xufive'), ('gender', '男')]

2.5 遍歷字典

遍歷字典的時(shí)候,很多同學(xué)或?qū)懗杀闅v字典的keys()。其實(shí),不需要這么麻煩,可以像下面這樣直接遍歷。

>>> a = dict([('name', 'xufive'), ('gender', '男')])
>>> for
    
 key in a:
        print(key, a[key])

name xufive
gender 男

3. 圓括號(hào)

圓括號(hào)代表元組對(duì)象,這么說(shuō)應(yīng)該沒有問(wèn)題吧?的確,聽起來(lái)沒有問(wèn)題,但在元組的使用上,我相信每個(gè)初學(xué)者都會(huì)跌進(jìn)同一個(gè)深坑至少一次。

3.1 必入之淺坑

元組不用于列表的最顯著的特點(diǎn),就是無(wú)法更新元素的值。忘記或者忽略這一點(diǎn),就會(huì)入坑。

>>> a = (3, 4)
>>> a[0] = 5
Traceback (most recent call last):
  File "", line 1, in 
    a[0] = 5
TypeError: 'tuple' object does not support item assignment

3.2 必入之深坑

使用了多年P(guān)ython之后,我曾經(jīng)寫出的最糟糕的bug,就是下面這一段代碼。

>>> import threading
>>> def do_something(name):
        print('My name is %s.'%name)

>>> th = threading.Thread(target=do_something, args=('xufive'))
>>> th.start()
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
TypeError: do_something() takes 1 positional argument but 6 were given

我分明只提供了1個(gè)參數(shù),卻提示說(shuō)給出了6個(gè)參數(shù),為什么呢?原來(lái),元組初始化時(shí),如果只有單個(gè)參數(shù),則必須在單個(gè)參數(shù)之后增加一個(gè)逗號(hào)(,),否則,初始化結(jié)果僅返回原參數(shù)。

>>> a = (5)
>>> a
5
>>> type(a)
<class

    
 'int'>
>>> b = ('xyz')
>>> b
'xyz'
>>> type(b)
<class 'str'>
>>> a, b = (5,), ('xyz',)
>>> a, b
((5,), ('xyz',))
>>> type(a), type(b)
('tuple'>, 'tuple'>)

3.3 單星號(hào)解包元組

格式化輸出字符串時(shí),C語(yǔ)言風(fēng)格是我的最愛。當(dāng)有多個(gè)%需要匹配時(shí),下面也許是最自然而然的寫法。

>>> args = (95,99,100)
>>> '%s:語(yǔ)文%d分,數(shù)學(xué)%d分,英語(yǔ)%d分'%('天元浪子', args[0], args[1], args[2])
'天元浪子:語(yǔ)文95分,數(shù)學(xué)99分,英語(yǔ)100分'

正確固然正確,但不夠精彩。滿分寫法應(yīng)該是這樣的。

>>> args = (95,99,100)
>>> '%s:語(yǔ)文%d分,數(shù)學(xué)%d分,英語(yǔ)%d分'%('天元浪子', *args)
'天元浪子:語(yǔ)文95分,數(shù)學(xué)99分,英語(yǔ)100分'

3.4 為什么要使用元組?

既然元組的元素不可改變,那為什么還要使用元組呢?使用列表代替元組不是更方便嗎?誠(chéng)然,在多數(shù)情況下,可以使用列表代替元組,但下面的例子卻可以證明,列表無(wú)法代替元組。

>>> s = {1,'x',(3,4,5)}
>>> s
{1, (3, 4, 5), 'x'}
>>> s = {1,'x',[3,4,5]}
Traceback (most recent call last):
  File "", line 1, in 
    s = {1,'x',[3,4,5]}
TypeError: unhashable type: 'list'

我們可以將元組加到集合中,但列表不行,因?yàn)榱斜硎遣豢晒#╱nhashable)的。理解這一點(diǎn)并不困難:列表元素可以被動(dòng)態(tài)改變,所以沒有一個(gè)固定不變的哈希值——這與集合要求的元素唯一性沖突;而元組的元素被禁止更新,其哈希值在整個(gè)生命周期都不會(huì)變化,因此可以成為集合的元素。

顯然,元組和列表有著完全不同的存儲(chǔ)方式。因?yàn)椴挥每紤]更新問(wèn)題,元組的速度性能要遠(yuǎn)優(yōu)于列表。優(yōu)先使用元組,應(yīng)該成為Python程序員遵循的一條基本原則。

“Python的方括號(hào)、花括號(hào)和圓括號(hào)怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞標(biāo)題:Python的方括號(hào)、花括號(hào)和圓括號(hào)怎么使用
網(wǎng)址分享:http://bm7419.com/article10/gihhgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、企業(yè)建站網(wǎng)站導(dǎo)航、云服務(wù)器、網(wǎng)頁(yè)設(shè)計(jì)公司、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司