熱線電話:13121318867

登錄
首頁精彩閱讀Python學習筆記—使用list和tuple
Python學習筆記—使用list和tuple
2017-04-23
收藏

Python學習筆記—使用list和tuple

(一)List
1.Python內置的一種數據類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。
比如,列出班里所有同學的名字,就可以用一個list表示:

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
變量classmates就是一個list。
用len()函數可以獲得list元素的個數:

>>> len(classmates)
3

2.用索引來訪問list中每一個位置的元素,記得索引是從0開始的:

>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
當索引超出了范圍時,Python會報一個IndexError錯誤,所以,要確保索引不要越界,記得最后一個元素的索引是len(classmates) - 1。

>>> classmates[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
如果要取最后一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最后一個元素:

>>> classmates[-1]
'Tracy'

以此類推,可以獲取倒數第2個、倒數第3個:

>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
>>> classmates[-4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

當然,倒數第4個就越界了。

list是一個可變的有序表,所以,可以往list中追加元素到末尾:

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

3.也可以把元素插入到指定的位置,比如索引號為1的位置:

>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

4.要刪除list末尾的元素,用pop()方法:

>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
要刪除指定位置的元素,用pop(i)方法,其中i是索引位置:

>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
5.要把某個元素替換成別的元素,可以直接賦值給對應的索引位置:

>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']
list里面的元素的數據類型也可以不同,比如:

>>> L = ['Apple', 123, True]
list元素也可以是另一個list,比如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
要拿到’PHP’可以寫s[2][1],因此s可以看成是一個二維數組,類似的還有三維、四維……數組,不過很少用到。

如果一個list中一個元素也沒有,就是一個空的list,它的長度為0:

>>> L = []
>>> len(L)
0
6.對List進行排序,Python提供了兩個方法
方法1.用List的內建函數list.sort進行排序
list.sort(func=None, key=None, reverse=False)
Python實例:

>>> list = [2,5,8,9,3]  
>>> list  
[2,5,8,9,3]  
>>> list.sort()  
>>> list  
[2, 3, 5, 8, 9]
方法2.用序列類型函數sorted(list)進行排序
Python實例:

>>> list = [2,5,8,9,3]  
>>> list  
[2,5,8,9,3]  
>>> sorted(list)  
[2, 3, 5, 8, 9]
兩種方法的區別:
sorted(list)返回一個對象,可以用作表達式。原來的list不變,生成一個新的排好序的list對象。
list.sort() 不會返回對象,改變原有的list。
其他sort的實例:
實例1:正向排序

>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]

實例2:反向排序

>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>L
>>>[4,3,2,1]
    切片
    1.取一個list或tuple的部分元素是非常常見的操作。比如,一個list如下:

>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

2.取前3個元素,應該怎么做?(L[0],L[1],L[2])
擴展一下,取前N個元素就沒轍了。
取前N個元素,也就是索引為0-(N-1)的元素,可以用循環:

>>> r = []
>>> n = 3
>>> for i in range(n):
        r.append(L[i])
>>> r
['Michael', 'Sarah', 'Tracy']

3.對這種經常取指定索引范圍的操作,用循環十分繁瑣,因此,Python提供了切片(Slice)操作符,能大大簡化這種操作
對應上面的問題,取前3個元素,用一行代碼就可以完成切片:

>>> L[0:3]
['Michael', 'Sarah', 'Tracy']

L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。

4.如果第一個索引是0,還可以省略:

>>> L[:3]
['Michael', 'Sarah', 'Tracy']
5.也可以從索引1開始,取出2個元素出來:

>>> L[1:3]
['Sarah', 'Tracy']
6.類似的,既然Python支持L[-1]取倒數第一個元素,那么它同樣支持倒數切片,試試:

>>> L[-2:]
['Bob', 'Jack']
>>> L[-2:-1]
['Bob']
記住倒數第一個元素的索引是-1。
7.切片操作十分有用。我們先創建一個0-99的數列:

>>> L = range(100)
>>> L
[0, 1, 2, 3, ..., 99]
8.可以通過切片輕松取出某一段數列。比如前10個數

>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

9.后10個數:

>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

10.什么都不寫,只寫[:]就可以原樣復制一個list:

>>> L[:]
[0, 1, 2, 3, ..., 99]

11.所有數,每5個取一個:

>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70,      75, 80, 85, 90, 95]

12.前10個數,每兩個取一個:

>>> L[:10:2]
[0, 2, 4, 6, 8]

(二)tuple

1.一種有序列表叫元組:tuple。
2.tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:

>>> classmates = ('Michael', 'Bob', 'Tracy')

3.現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0],classmates[-1],但不能賦值成另外的元素。

4.不可變的tuple有什么意義?因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。

5.如果要定義一個空的tuple,可以寫成():

>>> t = ()
>>> t
()
但是,要定義一個只有1個元素的tuple,如果你這么定義:

>>> t = (1)
>>> t
1
定義的不是tuple,是1這個數!這是因為括號()既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算,計算結果自然是1。
所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義:
>>> t = (1,)
>>> t
(1,)
6.Python在顯示只有1個元素的tuple時,也會加一個逗號,,以免你誤解成數學計算意義上的括號。

7.tuple也是一種list,唯一區別是tuple不可變。因此,tuple也可以用切片操作,只是操作的結果仍是tuple:

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)
字符串’xxx’或Unicode字符串u’xxx’也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串:數據分析師培訓
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'
有了切片操作,很多地方循環就不再需要了。Python的切片非常靈活,一行代碼就可以實現很多行循環才能完成的操作。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢