リスト生成式(第19編)

1578 ワード

リスト(range(0,11))でリストを生成できますが、[1,4,9,16,25,36,49,64,81,100]を生成させると難しいですが、賢いあなたはループを考えています.
L = []
for i in range(0,11):
    L.append( i * i )

これでもいいです.素晴らしいです.しかしPythonは、コード1行で解決するより簡単な方法を提供しています.
>>> [i * i for i in range(0, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

これがリスト生成式です.生成する必要がある要素i*iを前に置いて、後ろにforループが付いていて、とても簡単です.もう1つの例を見て、リスト内のすべての要素を大文字にします.
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.upper() for s in L]
['HELLO', 'WORLD', 'IBM', 'APPLE']

if文を追加してフィルタリングすることもできます.
>>> [i *i for i in range(0,11) if (i * i) % 2 == 0 ]
[0, 4, 16, 36, 64, 100]

これは次のようなものです.
L = []
for i in range(0, 11):
    if (i * i) % 2 == 0:
        L.append(i * i)

それだけでなく、リスト生成式は多層ループを実現することもできます.
>>> [m + n for m in '123' for n in 'abc']
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']

次のようになります.
L = []
for m in '123':
    for n in 'abc':
        L.append(m + n)

リスト生成式を用いて簡潔なコードを書くことができる.
リスト生成式は、listを2つの変数で生成することもできます.
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } 
>>> [k + '=' + v for k, v in d.items()] 
['y=B', 'x=A', 'z=C']