溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python方括號、花括號和圓括號舉例分析

發(fā)布時間:2021-11-26 11:39:20 來源:億速云 閱讀:281 作者:iii 欄目:大數據

這篇文章主要介紹“Python方括號、花括號和圓括號舉例分析”,在日常操作中,相信很多人在Python方括號、花括號和圓括號舉例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python方括號、花括號和圓括號舉例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1. 方括號

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

1.1 創(chuàng)建列表

對于初學者來說,創(chuàng)建列表最常用的方法就是用一對方括號。

>>> a = []

>>> a

[]

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

>>> b

[3.14, False, 'x', None]

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

>>> c = [i**2 for i in range(5)]

>>> c

[0, 1, 4, 9, 16]

但我一直覺得,方括號就像口語或俚語,太過隨便。我更喜歡使用嚴謹的list()來創(chuàng)建列表。使用list()創(chuàng)建列表,是list類的實例化的標準方法,可以體會list類的構造函數如何適應不同類型的參數。

>>> 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 列表的索引

方括號可以創(chuàng)建列表,但方括號并不等同于列表,因為方括號還用來索引。

新手學習,Python 教程/工具/方法/解疑+V:itz992
>>> [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]

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

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

>>> a[2:2] = [1,2,3]

>>> a

[3.14, False, 1, 2, 3, 'x', None]

1.3 列表的方法

對于列表對象的方法如果能信手拈來,那就是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]

[外鏈圖片轉存中...(img-hLHZyKxT-1598605123427)]

2. 花括號

花括號代表字典對象,大多數初學者都這樣認為。然而,這是錯誤的,至少是片面的。下面的代碼中,a和b都是用花括號創(chuàng)造出來的對象,卻一個是字典,一個是集合。

>>> a = {}

>>> a

{}

>>> b = {'x','y','z'}

>>> b

{'y', 'z', 'x'}

>>> type(a)

<class 'dict'>

>>> type(b)

<class 'set'>

原來,Python用花括號表示字典和集合兩種對象:花括號內是空的,或者是鍵值對的,表示字典;花括號內是無重復元素的,表示集合。為了不引起誤會,我習慣用dict()來生成字典,用set()來生成集合。

>>> 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}

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

2.1 判斷一個鍵是否存在于字典中

Py2時代,dict對象曾經有has_key()的方法,用來判斷是否包含某個鍵。py3舍棄了這個方法,判斷一個鍵是否存在于字典中,只能使用in這樣的方法了。

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

>>> 'x' in a

True

>>> 'v' in a

False

2.2 向字典中添加一個新鍵或更新鍵值

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

>>> a = dict()

>>> a['name'] = 'xufive'

>>> a

{'name': 'xufive'}

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

>>> a = dict()

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

>>> a

{'name': 'xufive', 'gender': '男'}

2.3 從字典中獲取一個鍵值

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

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

18

2.4 獲取字典的全部鍵、全部值、全部鍵值對

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

>>> a = dict()

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

>>> list(a.keys())

['name', 'gender']

>>> list(a.values())

['xufive', '男']

>>> list(a.items())

[('name', 'xufive'), ('gender', '男')]

2.5 遍歷字典

遍歷字典的時候,很多同學或寫成遍歷字典的keys()。其實,不需要這么麻煩,可以像下面這樣直接遍歷。

[外鏈圖片轉存中...(img-TX368vfd-1598605123430)]

3. 圓括號

圓括號代表元組對象,這么說應該沒有問題吧?的確,聽起來沒有問題,但在元組的使用上,我相信每個初學者都會跌進同一個深坑至少一次。

3.1 必入之淺坑

元組不用于列表的最顯著的特點,就是無法更新元素的值。忘記或者忽略這一點,就會入坑。

>>> a = (3, 4)

>>> a[0] = 5

Traceback (most recent call last):

File "<pyshell#14>", line 1, in <module>

a[0] = 5

TypeError: 'tuple' object does not support item assignment

3.2 必入之深坑

使用了多年Python之后,我曾經寫出的最糟糕的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個參數,卻提示說給出了6個參數,為什么呢?原來,元組初始化時,如果只有單個參數,則必須在單個參數之后增加一個逗號(,),否則,初始化結果僅返回原參數。

>>> 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)

(<class 'tuple'>, <class 'tuple'>)

3.3 單星號解包元組

格式化輸出字符串時,C語言風格是我的最愛。當有多個%需要匹配時,下面也許是最自然而然的寫法。

>>> args = (95,99,100)

>>> '%s:語文%d分,數學%d分,英語%d分'%('天元浪子', args[0], args[1], args[2])

'天元浪子:語文95分,數學99分,英語100分'

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

>>> args = (95,99,100)

>>> '%s:語文%d分,數學%d分,英語%d分'%('天元浪子', *args)

'天元浪子:語文95分,數學99分,英語100分'

3.4 為什么要使用元組?

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

新手學習,Python 教程/工具/方法/解疑+V:itz992
>>> s = {1,'x',(3,4,5)}

>>> s

{1, (3, 4, 5), 'x'}

>>> s = {1,'x',[3,4,5]}

Traceback (most recent call last):

File "<pyshell#32>", line 1, in <module>

s = {1,'x',[3,4,5]}

TypeError: unhashable type: 'list'

我們可以將元組加到集合中,但列表不行,因為列表是不可哈希(unhashable)的。理解這一點并不困難:列表元素可以被動態(tài)改變,所以沒有一個固定不變的哈希值——這與集合要求的元素唯一性沖突;而元組的元素被禁止更新,其哈希值在整個生命周期都不會變化,因此可以成為集合的元素。

顯然,元組和列表有著完全不同的存儲方式。因為不用考慮更新問題,元組的速度性能要遠優(yōu)于列表。優(yōu)先使用元組,應該成為Python程序員遵循的一條基本原則。

到此,關于“Python方括號、花括號和圓括號舉例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI