[...] でリスト(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] で 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 を省略すると最初から、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] # 最初から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)と呼びます。タプルはリストとほぼ同じように使用できますが、要素を変更できない点が異なります。
a = (10, 20, 30, 40)
要素がひとつだけの時は、最後にカンマ(,)を記述する必要があります。
a = (10) # タプルではなく数値の10となる a = (10,) # タプルの(10,)となる
リスト要素は変更することはできますが、タプル要素を変更することはできません。
a1 = [10, 20, 30, 40] a2 = (10, 20, 30, 40) a1[2] = 60 # 代入できる a2[2] = 60 # エラーとなり、TypeError例外が発生する
タプルからリストに変換するには list() を、リストからタプルに変換するには tuple() を使います。
print list((1, 2, 3)) #=> [1, 2, 3] print tuple([1, 2, 3]) #=> (1, 2, 3)
{...} は、辞書(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() はリストの各要素に対して処理を行い、行った結果を返します。下記の例では各要素を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() はリストの最初の2要素を引数に処理を呼び出し、結果と次の要素を引数に処理の呼び出しを繰り返し、単一の結果を返します。下記の例では、各要素の合計を計算しています。
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)は、重複の無いリストを扱います。セット同士の減算、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'])