2017-09-16 5 views
3

1行を使って正の数のリストを作成しようとしていますが、それは私のためには機能しません。 else passが機能しない理由pythonのリストの理解で正の数だけ

newlist = [n if n>0 else pass for n in numbers] 

numbers = [34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7] 

私のコードを助けが必要ですか?あなたはほとんどそれを持っていた

+0

期待される出力を得るために 'else pass'を使う必要はありません。 – ZdaR

+1

@ZdaR通常if..else他のパスが期待通りに機能していますが、なぜそれがリスト内包で何が起こっていない 例: ' 番号= [34.6、-203.4、44.9、68.3、-12.2、44.6、12.7] 用nならば n> 0の場合: print(n) else: pass ' – Phani

+0

興味深いのは、リスト内包表記が' if'/'else'のno-opをサポートしない理由です。それを動作させるためにコードを修正することは一つのことですが、なぜOPのコードが 'pass'のために' SyntaxError'であるのか説明しません。 – roganjosh

答えて

6

numbers = [34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7] 

newlist = [n for n in numbers if n > 0] 

出力:(この:あなたは、例えば、なしで負の数を置き換えるために、他の必要な場合には

[34.6, 44.9, 68.3, 44.6, 12.7] 

あなたが求めているものではありませんが、完全性のためにここに含めます)

newlist = [n if n > 0 else None for n in numbers] 

出力:

[34.6, None, 44.9, 68.3, None, 44.6, 12.7] 

あなたが肯定的にすべての数字を変換したい場合は最後に、使用してabs

numbers = [34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7] 

newlist = [abs(n) for n in numbers] 

出力:

[34.6, 203.4, 44.9, 68.3, 12.2, 44.6, 12.7] 
+1

http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/ useful @Phani –

+1

@Reblochon私の予想される出力は次のとおりです。 [34.6、44.9、68.3、44.6、12.7] 「else none」と印刷したもの[34.6、なし、44.9、68.3、なし、44.6、12.7] – Phani

+0

はい、私は知っています。 else'。1つの答えに2つの構文をグループ化すると便利かもしれないと思いました。 –

関連する問題