列表(list)
用[...] 表示列表(list)。
a = [10, 20, 30, 40]
多行記述的方式,最後一個逗號可省略。
colors = [
'red',
'green',
'blue',
]
列表的元素類型可以不同。
a = [10, 'ABC']
列表的遍歷用for。
a = [1, 2, 3, 4, 5]
for n in a:
print n
[n] 代表下標。從0開始。
a = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
a1 = a[0] # 第0個: 'A'
a2 = a[2] # 第2個: 'C'
[n:m] 代表第 n個開始到 第m之前的一個(也就是 第m - 1個)元素。n 省略的話代表從0開始、m省略的話代表到結尾。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a1 = a[2:4] # 第2個開始到第3個: [2, 3]
a2 = a[2:] # 第2個開始到最後: [2, 3, 4, 5, 6, 7, 8, 9]
a3 = a[:4] # 第0哥開始到第3個: [0, 1, 2, 3]
[n:m:s] 的s代表跳躍幾個。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a1 = a[1:8:2] # 第1個到第7個,每次跳躍2個: [1, 3, 5, 7]
n, m 為負數的時候,指的是從結尾數起。
a = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
a1 = a[-1] # 最後的字符 'G'
a2 = a[-3:-1] # 從最後開始數第3個到最後開始的第1個的字符: ['E', 'F']
+ 運算符代表列表的結合。
print [1, 2, 3] + [4, 5, 6] #=> [1, 2, 3, 4, 5, 6]
len() 獲取列表的元素個數。
print len([1, 2, 3]) #=> 3
列表的列表(列表嵌套)。
a = [[1, 2], [3, 4], [5, 6]]
for list in a:
for n in list:
print n, #=> 1 2 3 4 5 6
元組(tuple)
(...) 用來表示元組(tuple)。元組的用法幾乎與列表相同,內容不能修改和編輯。
a = (10, 20, 30, 40)
要素只有一個的情況,末尾要加上逗號(,),用來區分括號運算符。
a = (10) # 不是元組,而是10本身
a = (10,) # 具有一個元素的元組
元組的內容一旦建立就不可以修改。
a1 = [10, 20, 30, 40]
a2 = (10, 20, 30, 40)
a1[2] = 60 # 可以賦值
a2[2] = 60 # 會報錯
通過 list() 可以轉換元組為新的列表,通過 tuple() 把列表轉為新的元組。
print list((1, 2, 3)) #=> [1, 2, 3]
print tuple([1, 2, 3]) #=> (1, 2, 3)
字典(dict)
{ ...} 符號來標記,字典(dict)是鍵值對的集合。
d = {'Yamada': 30, 'Suzuki': 40, 'Tanaka': 80}
要素的訪問方法
d1 = d['Yamada']
d2 = d['Suzuki']
d3 = d['Tanaka']
獲取所有元素的集合和鍵,值的集合。使用items(), keys(), valus(), iteritems()。
d = {'Yamada': 30, 'Suzuki': 40, 'Tanaka': 80}
for k, v in d.items():
print k, v # Tanaka 80, Yamada 30, Suzuki 40
for k in d.keys():
print k, d[k] # Suzuki 40, Yamada 30, Tanaka 80
for v in d.values():
print v # 80, 30, 40
for k, v in d.iteritems():
print k, v # Tanaka 80, Yamada 30, Suzuki 40
列表函數(map(), filter(), reduce())
map() 功能是列表的各個元素逐個處理,把處理結果返回。
下面是把所有元素*2的處理。
a = [1, 2, 3]
def double(x): return x * 2
print map(double, a) #=> [2, 4, 6] : 函數方式
print map(lambda x: x * 2, a) #=> [2, 4, 6] : lambda方式
print [x * 2 for x in a] #=> [2, 4, 6] : 內包方式【後述】
filter() 對列表內容逐個處理,處理結果為真的話就保留。下面的處理是返回奇數。
a = [1, 2, 3]
def isodd(x): return x % 2
print filter(isodd, a) #=> [1, 3] : 函數方式
print filter(lambda x: x % 2, a) #=> [1, 3] : lambda方式
print [x for x in a if x % 2] #=> [1, 3] : 內包方式【後述】
reduce() 是先處理前兩個元素,再把結果和下一個元素做處理,以此類推。返回單一的結果。下面的處理是計算合計。
a = [1, 2, 3, 4, 5]
def add(x, y): return x + y
print reduce(add, a) #=> 15 : 函數方式
print reduce(lambda x, y: x + y, a) #=> 15 : lambda方式
列表內包記法
列表內包記法 是指不用map(), filter(), lambda就能進行一些簡單的列表處理。
a = [1, 2, 3]
print [x * 2 for x in a] #=> [2, 4, 6]
print [x * 2 for x in a if x == 3] #=> [6]
print [[x, x * 2] for x in a] #=> [[1, 2], [2, 4], [3, 6]]
print [(x, x * 2) for x in a] #=> [(1, 2), (2, 4), (3, 6)]
b = [4, 5, 6]
print [x * y for x in a for y in b] #=> [4, 5, 6, 8, 10, 12, 12, 15, 18]
print [a[i] * b[i] for i in range(len(a))] #=> [4, 10, 18]
集合(set)
集合(set)可以理解為沒有重復元素的列表。集合之間可以進行減、OR、AND、XOR等操作。
a = set(['red', 'blue', 'green'])
b = set(['green', 'yellow', 'white'])
print a #=> set(['red', 'blue', 'green'])
print b #=> set(['green', 'yellow', 'white'])
print a - b #=> set(['red', 'blue'])
print a | b #=> set(['red', 'blue', 'green', 'yellow', 'white'])
print a & b #=> set(['green'])
print a ^ b #=> set(['red', 'blue', 'yellow', 'white'])
print 'green' in a #=> True
a.add('black')
print a #=> set(['red', 'blue', 'green', 'black'])