Python のリスト処理について、まとめました。―for 文、組み込み関数(map)、内包表記―
Java などの他の言語に慣れてから Python を始めると、はじめはシンプルな構文もあって、サクサク書けるのですが、ふとしたところでつまづきがあります。私にとって、それはリスト処理でした。Python でリストの中身を処理したいけどやり方がたくさんありすぎる…普通は for ループでいいんだろうけど、内包表記とか、map とかいろいろあって、どれを使えばいいのかわからない…なので、調べてみました。調べたのは Python3.x です。
for 文
おなじみの for 文です。他の多くの言語と同じように利用できることができます。{}などで囲むことなく、インデントでループを記述できるのはうれしいですね。for…in 文でリストの中身すべてを処理できます
foods = ['ham', 'egg', 'spam']
dishes = []
for food in foods:
dishes.append(food + '_spam')
print(dishes)
結果: ['ham_spam', 'egg_spam', 'spam_spam']
内包表記
Python の心構えを示した「Zen of Python」に「Flat is better than nested.(入れ子よりフラットのほうがよい)」というものがあります。内包表記はそのような考えのもとインデントを使わずに、リスト処理をするものです。見た目複雑ですが、処理を順番に書いていくプログラミング文ではなく、普通の英語のように読んでいけばいいことが分かりました。
foods = ['ham', 'egg', 'spam']
dishes = [ food + '_spam' for food in foods ]
print(dishes)
結果: ['ham_spam', 'egg_spam', 'spam_spam']
上記の場合「food に’_spam’ を連結する(処理の内容)。 foodsの中にfoodがある限り(条件)」という意味になります
for ループでは新たな配列 dishes を予め作っておき、その中に ‘_spam’ を加える、という二段階をたどっていました。それに対して、内包表記は配列自体を作るのと、その中身を作る処理を同時に行うものだと解釈できます。
map 関数 + lambda
最後は組み込み関数の map です。引数を2つ取る関数で 「map(関数, リスト) 」というふうに使います。関数の処理内容をリストの中身ひとつひとつに適用するというものです。したがって、引数として渡す関数は、必ず値を返す必要があります。
def cook(food):
return food + '_spam'
foods = ['ham', 'egg', 'spam']
dishes = map(cook, foods)
さて、python には lambda という、予め関数を定義しておかくても、その場で関数を定義する機能があります。定義は「lambda 引数:戻り値」と言うかたちで行います。そうやって作った関数を、変数に格納することもできます。
上のコードを lambda を使って書き直すと、下記のようになります
foods = ['ham', 'egg', 'spam']
dishes = map(lambda str: str + '_spam', foods)
さて、for 文や内包表記での例のように
print(dishes)
として リスト dishes の中身を出力したいのですが、
<map object at 0x10ee71908>
のように謎のオブジェクトが出力されます。これは iterator というもので、リスト処理はまだ実行されず準備段階のオブジェクトとして保存しているものです。リストの要素数がとても多い時これをうまく使うことで、処理のタイミングをはかり、メモリを節約するなどできます。
処理を行いたいときは
list(dishes)
などのように、list 関数に渡すなどします。なので、結果を出力したいときは
print(list(dishes))
のように書きます。
以上 python のリスト処理をまとめました。
-
お問い合わせ
SiTest の導入検討や
他社ツールとの違い・比較について
弊社のプロフェッショナルが
喜んでサポートいたします。 -
コンサルティング
ヒートマップの活用、ABテストの実施や
フォームの改善でお困りの方は、
弊社のプロフェッショナルが
コンサルティングいたします。
今すぐお気軽にご相談ください。
今すぐお気軽に
ご相談ください。
(平日 10:00~19:00)
今すぐお気軽に
ご相談ください。
0120-315-465
(平日 10:00~19:00)
グラッドキューブは
「ISMS認証」を取得しています。
認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業
「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。