One Point of Python “リスト内包表記”
Python の初心者向けに、知っておけば得するちょっとした豆知識を提供したい。今回は、“リスト内包表記”について取り上げる。
この表記は、シーケンスの個々の要素に対して関数や式を適用して結果としてリストを得るという方法である。for文を使うより遥かに便利な表記法なので使い慣れることをお勧めする。
>>> ll = []
>>> for x in range(97,102):
... ll.append(chr(x))
...
>>> ll
['a', 'b', 'c', 'd', 'e']
>>> ll = [chr(x) for x in range(97,102)]
>>> ll
['a', 'b', 'c', 'd', 'e']
式に適用することも可能である。
>>> [ 2*x+1 for x in range(10)]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
if文も使えることができるので条件判定も可能である。
>>> [x for x in range(10) if x%2 != 0]
[1, 3, 5, 7, 9]
さらにネストすることもできる。
>>> [x+y for x in [1,2,3] for y in [10,20,30]]
[11, 21, 31, 12, 22, 32, 13, 23, 33]
>>> [x+'+'+y for x in 'abc' for y in 'uvw']
['a+u', 'a+v', 'a+w', 'b+u', 'b+v', 'b+w', 'c+u', 'c+v', 'c+w']
>>> [(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2!=0]
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
コードを短くできるメリットがあるが、あまり条件判定をネストすると読みにくくなる。