LoginSignup
0
0

More than 3 years have passed since last update.

pythonのlist comprehension(list生成法)について

Last updated at Posted at 2020-07-30

最初に

ブロックチェーンの練習について初めてやってみたけど、かなり練習してきたpythonでもやはり忘れることが多く、一見してわかりそうなことが実はわからなかったりする。今回は実は、このall(k in value for k in list1)というコードに出会って、わけわからんと思って調べたら、得られた知識です。メモっておこうと思った。

pythonのリスト生成法

pythonのリスト生成法は色々あるが、今回紹介するlist comprehensionはその中で最も優れている方法かもしれない。  

早速例を見よ

>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

じゃ[1*1, 2*2, 3*3, ..., 10*10]のリストを作りたいけど、どうする?

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

上記も行けるけど、もう少し簡単に書こう。

>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

一発で書けたんだね。
非常に役に立つ書き方だ。覚えておこう。たくさん書くとなれていくよ。

もう少し複雑なやつだと、二重ループ

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for x in d.items():
...     print(x)
('x', 'A')
('y', 'B')
('z', 'C')
>>> for k, v in d.items():
...     print(k, '=', v)
...
y = B
x = A
z = C

ここで、問題を出そう。  
リストに文字列、数字があるとする。この場合ですと、lower()関数を下のように使ったら、エラーが出てしまう。
どのように設定したら、エラーが出ずに、文字列だけを抽出してlower()関数で文字列を小文字にできるか?

>>> L = ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L]

回答:

# -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [x.lower() for x in L1 if isinstance(x, str)]
print(L2)

# ["hello", "world", "apple"]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0