2009年10月21日 星期三

[Python 學習筆記] 5: List & Tuple

上網時看到的一篇,簡明清楚,留下來日後參考。

http://www.rainsts.net/article.asp?id=380


[ 2006-12-13 17:14:52 | 作者: yuhen ]


列表(List) : 類似於 .NET ArrayList / List。

元組(Tuple) : 列表的唯讀版。

1. 轉換

我們可以使用 list() / tuple() 函數在列表和元組之間進行轉換。

>>> a = [1, 2, 3]
>>> b = tuple(a)
>>> b
(1, 2, 3)
>>> c = list(b)
>>> c
[1, 2, 3]


這兩個函數接受字串參數時候比較有意思。

>>> list("abc")
['a', 'b', 'c']
>>> tuple("abc")
('a', 'b', 'c')


2. 運算符操作

列表支援運算符操作。

>>> [1, 2] * 2
[1, 2, 1, 2]
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]


3. in / not in

可以使用 in / not in 來判斷是否包含某個元素。

>>> a = [1, 2, 3]
>>> 1 in a
True
>>> 444 in a
False
>>> 444 not in a
True
>>> b = (1, 2, 3)
>>> 1 in b
True


4. range()

我們還可以使用 range() 函數獲得一個整數列表,甚至進行運算和添加過濾條件。

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(2, 6)
[2, 3, 4, 5]
>>> [x * 2 for x in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> [x for x in range(10) if x % 2 > 0]
[1, 3, 5, 7, 9]
>>> [x + 1 for x in range(10) if x % 2 > 0]
[2, 4, 6, 8, 10]


5. Slices

和字串一樣,我們可以通過序號或切片進行訪問。

>>> b = (1, 2, 3)
>>> b[1]
2
>>> b[1:]
(2, 3)
>>> b[-1]
3
>>> b = [1, 2, 3]
>>> b[1] = 200
>>> b
[1, 200, 3]


6. 相關方法

基本方法:

>>> a = (1, 2, 3)
>>> len(a)
3
>>> min(a)
1
>>> max(a)
3
>>> a = ["a", "b", "c"]
>>> a.index("b")
1
>>> a += ["b"]
>>> a
['a', 'b', 'c', 'b']
>>> a.count("b")
2
>>> a.insert(1, "sss")
>>> a
['a', 'sss', 'b', 'c', 'b']
>>> a.remove("sss")
>>> a
['a', 'b', 'c', 'b']
>>> a.pop(1)
'b'
>>> a
['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
>>> a.extend(["d", "e"])
>>> a
['a', 'b', 'c', 'd', 'e']
>>> a.append(["f", "g"])
>>> a
['a', 'b', 'c', 'd', 'e', ['f', 'g']]


還可以使用 filter() 進行過濾。

>>> a = range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def divfilter(i):
return i % 2 == 0

>>> filter(divfilter, a)
[0, 2, 4, 6, 8]


上面的代碼還可以簡寫為:

>>> filter(lambda i: i % 2 == 0, range(10))
[0, 2, 4, 6, 8]


當 function 參數為 None 時,可以用來過濾掉空值。

>>> b = ["a", "", [], [1, 2]]
>>> filter(None, b)
['a', [1, 2]]


map() 類似 .NET 中的 Array.Foreach()

>>> map(lambda i: i + 10, range(10))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]


另外,我們還可以使用 reduce() 對元素進行統計。

>>> import operator
>>> reduce(operator.add, range(10))
45
>>> 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
45


zip() 方法可以對兩個或多個列表/元組進行交叉合併。

>>> zip(range(1, 10), ("a", "b", "c", "d"))
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]


[最後修改由 yuhen, 於 2006-12-17 23:25:34]


  
  

沒有留言: