2012-02-18 13 views
2
numbers = [1,2,3,4,5,6,7,8,9] 
number = 1 

次の行を1行に書くことはできますか?ルビーのスタイルを使用してPythonの1つのライナーですか? x in yならdo x

if number in numbers: 
    print number 

:私が試してみました

puts number if numbers.include?(number) 

print number if number in numbers 

しかし、構文が無効です。

+0

FWIW、Rubyでそれを行うための別の方法は、アレイの交点であります: '数字と[数]を入れます。私は、Pythonで単純な同等のものがあるかどうかわかりません。 –

+0

以下の回答に加えて、[this](http://stackoverflow.com/q/9345250/988071)スレッドがあります。 – mau5padd

+0

@マークトーマス私はそれを知らなかった。ニース;) – beoliver

答えて

11

PythonはPythonで、RubyはRubyです。私のアドバイスは、もう一方に書くことではありません。

PythonにはRuby/Perlの "postfix if"がありません。これを書くためのPythonの方法は、すでに持っているものです。

しかし、あなたは本当に、これは動作しますしなければならない場合:しかしそれは公式のスタイルガイド、PEP8に反している

if number in numbers: print number 

、:同じで

  • 複合文(複数の文をライン)は一般に推奨されません。

    はい:

    if foo == 'blah': 
        do_blah_thing() 
    do_one() 
    do_two() 
    do_three() 
    

    むしろません:あなたは、Python 3を使用している場合は、

    if number in numbers: print number 
    

    または:これはトリックを行う必要があります

    if foo == 'blah': do_blah_thing() 
    do_one(); do_two(); do_three() 
    
+0

ありがとう、私はちょうど私が行方不明だった少しトリックではなかったことをチェックしていた。あなたの答えが与えるような形で書くのは「悪い形」と考えられますか? – beoliver

+2

はい。私の編集を参照してください。 – Thomas

+0

Postfixの場合?あなたは[PEP 308](http://www.python.org/dev/peps/pep-0308/)を意味します:-) – Irfy

1

if number in numbers: print(number) 

私は2つのライナーを使用しています。

5

pythonの構文はyes_value if test else no_valueです。わかりやすくするために、オプションの括弧を使用すると、この言うことができる:私は同意

print "Searching...", ("Found it" if n in numbers else "Not found") 

を、構文は非常に直感的です。 Cの条件式も読みやすくなります。

+0

あなたの事実はうまくいきますが、あなたの意見はぞっとするようです。 –

+3

どうしたの? – pythondjango

2

あなたは、Python 2.7で作業を構築得るでしょう、あなたの元のコードの末尾に他「」を追加する場合:

print number if number in numbers else "" 

番号が数字である場合、それが印刷されます。それ以外の場合は、空の文字列が出力されます。

しかし、他の人が指摘しているとして、あなたが本当にすべてで実行される印刷ステートメントをしたくない場合は、あなたが行かなければならない:

if number in numbers: print number 
関連する問題