1. 程式人生 > >列表和元祖

列表和元祖

運算 偏移量 索引表 list 成員 而在 type 10個 mod

在python中,最基本的數據結構為序列。序列中的每個元素都有編號,即位置或索引。其中第一個元素的索引為0,第二個元素的索引為1,依次類推。從0開始指的是相對於序列開頭的偏移量。用負索引表示序列末尾元素的位置。

序列概述

Python三種序列:列表、元祖、字符串。

列表和元祖的不同在於,列表是可以修改的,而元祖不可以。(想想為什麽有的內置函數返回元祖的原因。)

在自己編寫程序的時候,幾乎所有的情況都可使用列表來代替元祖。一種情況例外,將元祖作用作字典鍵。(字典鍵是不允許修改的。)

列表用中括號來表示:

>>> lilei = [‘lilei‘, 18]

序列還可以包含其他序列:

>>> lilei = [‘lilei‘, 18]
>>> hanmeimei = [‘hanmeimei‘, 13]
>>> jom = [‘jom‘, 15]
>>> database = [lilei, hanmeimei, jom]
>>> database 
[[‘lilei‘, 18], [‘hanmeimei‘, 13], [‘jom‘, 15]]

  PS: Python支持一種數據結構的基本概念,名為容器。容器基本上就是可包含其他對象的對象。兩種主要的容器是序列(列表、元素)和映射(如字典)。在序列中,每個元素都有編號,而在映射中,每個元素都有名字(鍵)。有一種既不是序列也不是映射的容器,它就是集合。

通用的序列操作

  有幾種操作適用於所有的序列,包括索引、切片、相加、相乘成員資格檢查。另外,Python中還提供了一些內置函數,可用於確定序列的長度以及找出序列中最大和最小的元素。

 PS:有一種操作暫時不討論,叠代。對序列進行叠代意味著對其每個元素都執行特定的操作。

索引

  序列中所有的元素都有編號---從0開始遞增。你可像下面這樣使用編號來訪問各個元素:

>>> msg = ‘hello ‘
>>> msg[0]
‘h‘

  當使用負數索引的時,Python將從右(即元素的最後一個位置)開始往左數,因此-1是最後一個元素的位置。

>>> msg[-1]
‘ ‘

 對於字符串字面量(以及其他的序列字面量),可以直接對其執行索引操作,無需先將其賦給變量。這與先賦給變量再對變量執行索引操作的效果是一樣的。

>>> ‘hello‘[1]
‘e‘

  如果函數調用返回一個序列,可直接對其執行索引操作。例如,如果你指向獲取用戶輸入的年份的第四位,可像下面這樣做:

>>> fourth = input("Year: ")[3]
Year: 2018
>>> fourth
‘8‘

  

切片

  除使用索引來訪問元素外,還可使用切片來訪問範圍內的元素。為此,可使用倆個索引,並用冒號分割:

>>> msg = ‘https://www.baidu.com‘
>>> msg[12:17]
‘baidu‘

  第一個索引包含的是第一個元素的編號,但第二個索引是切片後余下的第一個元素標號。

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numbers[3:6]
[4, 5, 6]
>>> numbers[3:6][1]
5

  這貌似就出現一個問題,無法取出來最後一個元素。可以這樣:

>>> numbers[7:0]

 步長

  執行切片操作的時候,可以顯示或者隱式的指定起點和終點,如:

>>> msg = ‘god is girl‘
>>> msg[0:]
‘god is girl‘
>>> msg[:8]
‘god is g‘
>>> msg[:]   #復制整個序列
‘god is girl‘

  但通常忽略一個參數,即步長。在普通切片中,步長為1(即默認為1).可以顯示的指定步長:

>>> msg[0::2]
‘gdi il‘

  還可以指定負數步長:

>>> msg[-1:0:-2] ‘li id‘

  序列相加

可使用加法運算符來拼接序列:

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> ‘hello‘ + ‘ ‘ + ‘world!‘
‘hello world!‘
>>> [1, 2, 3] + ‘hello‘
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

  PS:一般而言,不能拼接不同類型的序列。

相乘

將序列與數x相乘時,將重復這個序列x次來創建一個新序列:

>>> ‘python‘ * 5
‘pythonpythonpythonpythonpython‘
>>> [1, 2] * 5
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

空列表:

>>> list = []
>>> list
[]

包含10個‘什麽都沒有的值’的列表 

>>> list = [None] * 10
>>> list
[None, None, None, None, None, None, None, None, None, None]  

成員資格

要檢查特定的值是否包含在序列中,可使用運算符in:

>>> name = ‘Ubuntu‘
>>> ‘0‘ in name
False
>>> ‘u‘ in name
True
>>> list = [‘root‘, ‘ubuntu‘, ‘admin‘]
>>> ‘root‘ in list
True
>>> ‘roo‘ in list
False

  一般而言,運算符in檢查指定對象是否是序列(或其他集合)的成員(即其中的一個元素),但是對於字符串來說,只有它包含的字符才是其成員或元素。

函數list實則是類)

>>> list(‘hello‘)
[‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]

  可將任何序列作為list的參數。

>>> ‘‘.join([‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘])
‘hello‘

修改列表

修改列表很容易,就如同普通的賦值,不同的是使用索引表示法給特定的元素賦值。

>>> x = [1, 2, 3, 4]
>>> x[1] = 1
>>> x
[1, 1, 3, 4]

PS:不能給部存在的元素賦值。

>>> x = [1, 2, 3, 4]
>>> x[4] = [5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

刪除元素

從列表刪除元素很容易,只需要使用del語句即可。

>>> list = [‘root‘, ‘ubuntu‘, ‘admin‘]
>>> del list[0]
>>> list
[‘ubuntu‘, ‘admin‘]

給切片賦值

>>> name = list(‘root‘)
>>> name
[‘r‘, ‘o‘, ‘o‘, ‘t‘]
>>> name[2:] = list(‘ubuntu‘)
>>> name
[‘r‘, ‘o‘, ‘u‘, ‘b‘, ‘u‘, ‘n‘, ‘t‘, ‘u‘]
>>> name[2:] = ‘0‘
>>> name
[‘r‘, ‘o‘, ‘0‘]

  

列表和元祖