62557


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

[code]

    mylist = [1,2,3,4]
    
    for i in mylist:
        print(i)
        print(i%2) 
    
[/code]

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

[code]

    mylist = [1,2,3,4]
    
    [print(i);print(i%2); for i in mylist]
    
[/code]

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

[code]

    SyntaxError: invalid syntax
    
[/code]

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


CC BY-SA 4.0
2020-01-25T23:18:31.500
62550
2020-01-26T06:33:43.743
2020-01-25T23:39:40.437
34471
34471
question
python
実行内容に改行を含む場合のリスト内包表記の書き方について


# 回答

リスト内包表記で質問された方のコードを書き直してみました。

[code]

    mylist2 = [(i,i%2) for i in mylist]
    for i, i2 in mylist2:
        print(i)
        print(i2)
    
[/code]

# 質問された方のコードがエラーとなった理由

`print(i);print(i%2);`が式ではなく、文であるためにエラーとなりました。

**追記**  
質問にコメントされた方の方法を実行してみました。こちらの方がシンプルですね。

[code]

    [print(i, i%2, sep='\n') for i in mylist]
    [print(f'{i}\n{i%2}') for i in mylist] 
    
[/code]

`print(i);print(i%2);`は文ですが、`print(i)`や`print(i%2)`は式なのですね。思ってもみませんでした。

# リスト内包表記の文法

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

# その他

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

質問のタイトルにある`改行`はリスト内包表記とは関係ないと思います。

↑  
**以上は見当外れな記述でした。リスト内包表記に実行処理が書けるとは知りませんでした。**


CC BY-SA 4.0
2020-01-26T00:19:24.270
62551
2020-01-26T05:02:14.950
2020-01-26T05:02:14.950
35558
35558
62550
answer


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

> # リスト内包表記の文法
>
> [式 for 制御変数 in イテラブルなオブジェクト]

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

[code]

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

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

* * *

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

> `[(None, None), (None, None), (None, None), (None, None)]`

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


CC BY-SA 4.0
2020-01-26T06:33:43.743
62557
2020-01-26T06:33:43.743
13972
62550
answer