Python3學(xué)習(xí)三——數(shù)據(jù)結(jié)構(gòu)1(列表,元組)

數(shù)據(jù)結(jié)構(gòu)是通過某種方式(如對元素進行編號)組織在一起的數(shù)據(jù)元素的集合,這些元素可以是數(shù)字或字符。在Python中,最基本的數(shù)據(jù)結(jié)構(gòu)是序列(Sequence)。Python包含6種內(nèi)建序列,即列表、元組、字符串、Unicode字符串、buffer對象和xrange對象。這里只說到最常用的兩種,即列表和元組。

1. 通用操作

Python中所有序列都可以進行一些特定操作,包括索引(indexing)、切片(slicing)、序列相加(adding)、乘法(multiplying)、成員資格、長度、最小值和最大值。

索引和切片

在列表后面用 [] 加上數(shù)字就可以進行索引了。在索引里面用冒號 : 就可以切片了。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[1] #這就是索引,用下標(biāo)指向列表里面的元素。
2
>>> a[0] #注意索引從0開始.
1
>>> a[1:3] #Python的切片功能非常強大,只用一個冒號就可以完成各種切片.
[2, 3]
>>> a[:]    #如果冒號前后沒有數(shù)字,分別默認為第一個元素和最后一個元素
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[:-1]  #索引還可以是負號, 其中-1代表最后一個元素.
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:-1]   #注意 a[0:-1]和a[:-1]是一樣的, 但是a[0:-1] 和a[0:] 不一樣,請思考是為什么
[1, 2, 3, 4, 5, 6, 7, 8, 9]

切片操作的實現(xiàn)需要提供兩個索引作為邊界,第一個索引的元素包含在切片內(nèi),第二個索引的元素不包含在分片內(nèi)。類似于數(shù)學(xué)里的a≤x<b,x是我們需要得到的元素,a是分片操作中的第一個索引,b是第二個索引,b不包含在x的范圍內(nèi)。
另外,切片里面還有一個默認參數(shù),就是步長。默認情況下,步長為1,需要的時候,可以自定義。

>>> a[0:11:2] #第二個冒號后面就是步長, 如果不寫的話默認是1, 現(xiàn)在我設(shè)定步長為2.
[1, 3, 5, 7, 9]
>>> a[11:3:-2]  #步長也可以設(shè)置為負數(shù), 對應(yīng)的前面的切邊也要倒過來,大的序號寫在前面, 小的序號寫在后面.
[10, 8, 6]

對于正數(shù)步長,Python會從序列的頭部開始向右提取元素,直到最后一個元素;對于負數(shù)步長,則是從序列的尾部開始向左提取元素,直到第一個元素。正數(shù)步長必須讓開始點小于結(jié)束點,而負數(shù)步長必須讓開始點大于結(jié)束點。

序列的加法和乘法就不多說了,和字符串的加法乘法是類似的。

成員資格

Python為我們提供了in運算符,用來檢查某個元素是否存在于某個序列。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 1 in a
True
>>> 0 in a
False
>>> 

注意in是一個運算符,運算符左邊是元素,右邊是列表,這就構(gòu)成了一個判斷語句,最終語句的結(jié)果是True或者False。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 1 in a
True
>>> 0 in a
False
>>> 'a' in a
False
>>> b = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
>>> 'a' in b
False
>>> 1 in b   #數(shù)字可以用in語句檢查是否存在字符串列表中。
False
>>> c = '123456789'
>>> 'a' in c
False
>>> 1 in c  #但是數(shù)字不能用in語句檢查是否存在字符串中。
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    1 in c
TypeError: 'in <string>' requires string as left operand, not int

長度、最小值和最大值

Python提供了三個內(nèi)置函數(shù)len(), min(), max(),分別用于計算列表的長度,給出列表的最小值,給出列表的最大值。
用法非常簡單,沒什么好說的。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> len(a)
10
>>> min(a)
1
>>> max(a)
10
>>> b =  [1, 2,'hello', 10]
>>> len(b)
4
>>> min(b)
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    min(b)
TypeError: '<' not supported between instances of 'str' and 'int'
>>> 

然而請注意混合型的列表不能用min() 和max(),否則會出現(xiàn)類型錯誤。

2. 列表操作

列表的內(nèi)容是可變的(mutable),這一點和字符串、元組不同。所以列表除了序列的通用操作,如索引、分片、相加、乘法之外,還有一些序列中沒有而列表中有的方法。
這些方法的作用都是更新列表,有元素賦值、元素增加、元素刪除、分片賦值和列表方法。

元素賦值

列表可以通過索引對元素進行賦值,而不可變的序列比如字符串和元組都不能進行這種操作。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[1]=100
>>> a
[1, 100, 3, 4, 5, 6, 7, 8, 9, 10] #我們改變了索引為1的元素。
>>> b=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
>>> b[1] = 100
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    b[1] = 100
TypeError: 'tuple' object does not support item assignment  #Python不允許對元組的元素賦值。
>>> c = '123456789'
>>> c[1]='100'
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    c[1]='100'
TypeError: 'str' object does not support item assignment  #Python不允許對字符串的元素賦值。

元素增加和元素刪除

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)據(jù)結(jié)構(gòu),是指通過某種方式(例如對元素進行編號)組織在一起的數(shù)據(jù)元素的集合,這些數(shù)據(jù)元素可以是數(shù)字或者字符,甚至可...
    千釋炎閱讀 944評論 0 0
  • 〇、前言 本文共108張圖,流量黨請慎重! 歷時1個半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識的框架詳細梳理了一遍。 ...
    Raxxie閱讀 19,556評論 17 410
  • 1.基本使用 1.1 數(shù)據(jù)類型 常用數(shù)據(jù)類型 Common Data Types 其他類型 Others 1.2 ...
    suwi閱讀 1,575評論 0 3
  • 本文為《爬著學(xué)Python》系列第九篇文章。 從現(xiàn)在開始算是要進入“真刀真槍”的Python學(xué)習(xí)了。之所以這么說,...
    SyPy閱讀 2,221評論 0 14
  • 表弟跟我說,他做了一個很特別的禮物:小心把核桃剝開,里面掏空后,放入一枚戒指,再用 502 膠水把核桃殼粘好,放在...
    張小島兒閱讀 937評論 0 0

友情鏈接更多精彩內(nèi)容