リストの補足。
- append(x)
- extend(L)
- insert(i,x)
- remove(x)
- pop(i),pop()
- index(x)
- count(x)
- sort()
- reverse()
関数プログラミングのツール
filter()
書式は以下のとおり。
filter(関数, シーケンス)
シーケンスから、関数が真となるアイテムのみを取り出し、取り出したアイテムから成る
シーケンスを返す。
>>> L = [1,2,3,4,5]
>>> filter(lambda x: x % 2, L)
[1, 3, 5]
>>>
な感じ。
map()
書式は以下のとおり。
map(関数, シーケンス)
シーケンスの各要素をパラメータに関数を実行し、その関数の実行結果からなるシーケンスを
返す。
シーケンスは複数個渡すこともできて、その場合関数はシーケンスの個数分の要素を受け取れる
ようにする必要がある。
>>> map(lambda x: x**2, L)
[1, 4, 9, 16, 25]
>>> map(lambda x, y: x**2 + y ** 2,L,L)
[2, 8, 18, 32, 50]
な感じ。
mapに渡すシーケンスが複数の場合で、「長さ」が異なるシーケンスが渡された場合、
不足した要素の分はNoneが使用される。
>>> L2 = [1,2]
>>> map(lambda x, y: (x, y), L, L2)
[(1, 1), (2, 2), (3, None), (4, None), (5, None)]
>>>
reduce()
書式は以下のとおり。
reduce(関数, シーケンス)
シーケンスの最初の2つの要素をとり、関数に渡す。その結果と次のシーケンスの要素を1つ取り、
関数に渡す。この処理をシーケンスの要素がなくなるまで繰り返す。
以下、1から10の総和。
>>> reduce(lambda x, y: x + y, range(1,11))
55
>>>
また、第三引数に初期値を指定できる。
初期値は最初の要素としてreduceに渡される。
>>> reduce(lambda x, y: x + y, range(1,11), 100)
155
>>>
リスト内包表記
書式は以下のとおり。
[式 for節 if節]
式とそれに続くfor節から成る。
さらに0個以上のforまたはif節が続けられる。
得られる結果は、式をforまたはif節で評価した結果のリスト。
式の評価値がタプルになる場合は括弧で囲まなければならない。
>>> [ x ** 2 for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [ (x ** 2, x ** 3) for x in range(1,11)]
[(1, 1), (4, 8), (9, 27), (16, 64), (25, 125), (36, 216), (49, 343), (64, 512), (81, 729), (100, 1000)]
>>>
del文
リストの要素を削除する。
>>> del L[1]
>>> L
[1, 3, 4, 5]
>>> del L[1:3]
>>> L
[1, 5]
>>>
な感じ。
タプルパッキング
>>> t = 1,2,3
>>> t
(1, 2, 3)
>>>
タプルアンパッキング
>>> t
(1, 2, 3)
>>> (a,b,c) = t
>>> a
1
>>> b
2
>>> c
3
>>>
な感じ。
多重代入は、タプルパッキングとタプルアンパッキングのあわせ技。
集合
重複しない要素を順不同で集めたもの。
>>> L = [1,2,3,1,2,3]
>>> set(L)
set([1, 2, 3])
>>>
な感じ。
数学的演算もサポートする。
>>> s1 = set('abcdefg')
>>> s2 = set('cdefghi')
>>> s1 - s2
set(['a', 'b'])
>>> s1 | s2
set(['a', 'c', 'b', 'e', 'd', 'g', 'f', 'i', 'h'])
>>> s1 & s2
set(['c', 'e', 'd', 'g', 'f'])
>>> s1 ^ s2
set(['i', 'h', 'b', 'a'])
>>>
ディクショナリ
いわゆる、連想配列やハッシュ。
キーには可変型オブジェクトは使えない。
ディクショナリのループ
>>> for k, v in D.iteritems():
... print "%s=%d" % (k, v)
...
a=1
c=3
b=2
>>>
iteritems()なんてのも使える。
シーケンスからインデックス値も同時に得る
enumerateを使うと、インデックス値をも得ることができる。
>>> L = [1,2,3,4,5]
>>> for i, v in enumerate(L):
... print "%d=%d" % (i,v)
...
0=1
1=2
2=3
3=4
4=5
>>>
おしまい。
.
0 コメント:
コメントを投稿