]> Panopticon :: Python :: Pythonのリスト処理と三項演算

<< ガンジス川でバタフライ | main | テクニカルエンジニア(ネットワーク) >>

Pythonのリスト処理と三項演算

複数リストのループ

昔のソースを見ていたら、こんなのがでてきた。どうやら一つのループで複数のリストを処理したかったようだ。

>>> lst = ['a', 'b', 'c', 'd']
>>> for t in zip(range(len(lst)), lst):
...     print t[0], t[1]
...
0 a
1 b
2 c
3 d

複数戻り値を受けるときと同じように、これでよい。

>>> for i, l in zip(range(len(lst)), lst):
...     print i, l
...
0 a
1 b
2 c
3 d

番号をつけるだけならenumerate()が便利。

>>> for i, l in enumerate(lst):
...     print i, l
...
0 a
1 b
2 c
3 d

リストと三項演算

ふたつのリスト、aとbを組み合わせて、cみたいなリストを作りたいことがよくある。え、あんまりないですか?

>>>  a = [1, 2, 3]
>>>  b = ['a', 'b', 'c', 'd', 'e']
>>>  c = [1, 2, 3, "d", "e"]

どちらが長いかわからないとき、forループで回すとちょっと面倒なので、

>>> a + b[len(a):] if len(a) < len(b) else b + a[len(b):]
[1, 2, 3, 'd', 'e']
>>> a,b = b,a
>>> a + b[len(a):] if len(a) < len(b) else b + a[len(b):]
[1, 2, 3, 'd', 'e']

要素を埋めて適当な長さのリストを作りたいときは内包表記が便利。

>>>  a = [1, 2, 3]
>>>  num = 5
>>>  [a[i] if len(a) > i else '' for i in range(num)]
[1, 2, 3, '', '']
カテゴリ

Trackback URI

http://www.panopticon.jp/mt/mt-tb.cgi/94

Trackbacks(0)

コメントする