実行内容に改行を含む場合のリスト内包表記の書き方について

投稿者: Anonymous

以下のようなコードをリスト内包表記に直したいです

mylist = [1,2,3,4]

for i in mylist:
    print(i)
    print(i%2) 

以下のように書いて試してみましたがエラーになりました。

mylist = [1,2,3,4]

[print(i);print(i%2); for i in mylist]

エラー内容は以下の通りです。

SyntaxError: invalid syntax

どうやったら改行を含む処理をリスト内包表記で表現できますか?
関数を1つ作るしかないですか?

解決

基本的には、akira ejiriさんの回答のオマケのようなものなのですが、

リスト内包表記の文法

[式 for 制御変数 in イテラブルなオブジェクト]

要は、forの前に式が来れば良いので、tupleを使うこともできそうです。

[(print(i),print(i%2)) for i in mylist]

無理に1つのprint関数の呼び出しに変換する必要がなく、print以外の式を順番に実行したい場合にも使えるのでより簡単かと。


ちなみに上記を評価した結果の値は以下のようなものになります。

[(None, None), (None, None), (None, None), (None, None)]

結果のリストが要らないのにリスト内包表記を使った方が良いかどうか、意見が別れそうに思うのですが、Python公式から何らかのガイドラインが出ているかは見つけられませんでした。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *