]>
<< ガンジス川でバタフライ | main | テクニカルエンジニア(ネットワーク) >>
昔のソースを見ていたら、こんなのがでてきた。どうやら一つのループで複数のリストを処理したかったようだ。
>>> 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, '', '']
http://www.panopticon.jp/mt/mt-tb.cgi/94
コメントする