11

重複の可能性:
単純な if-then ステートメントを 1 行に入れる

私は Python 式に取り組んでおり、その式を if else ステートメントを使用するよりも圧縮したいと考えています。

s = [1, 2, 3, 4]
if len(s)>5:
    print s.index(5)
else:
    print 'cant print'

as if else ステートメントを使用するよりも良い方法はありますか?

4

5 に答える 5

17

できるよ:

s = [1, 2, 3, 4]
print 'y' if len(s) > 5 else 'n'

ただし、これによりコードが読みやすくなるとは思いません (一目で)。また、ループを作成ifelseないでください。これらは単なる制御フローのステートメントです。ループは and を使用して記述されforますwhile

于 2012-07-15T12:38:15.810 に答える
12

短いですが、非常に難読化されています (これを行わないでください):

print 'ny'[len(s) > 5]

[編集] 決してこれを行うべきではない理由は、ほとんどの人にはほとんど知られていない言語のプロパティを使用するためです。つまり、bool は int のサブクラスです。OP のようなコードを記述しているほとんどの状況では、通常、フラグ変数を作成することをお勧めします。

s_is_long = len(s) > 5

次に、より適切な方法で印刷を作成できます。たとえば、次のようになります。

print 'y' if s_is_long else 'n'

また

print {True: 'y', False: 'n'}[s_is_long]

またはすべての中で最も読みやすい...

if s_is_long:
    print 'y'
else:
    print 'n'
于 2012-07-15T12:42:18.457 に答える
7

この場合、try/except ブロックを使用できます。

try:
    print s.index(5)
except ValueError:
    print "5 not in list"
于 2012-07-15T13:21:37.847 に答える
3

簡潔明瞭:

s = [1, 2, 3, 4]
output = {True: 'y',False: 'n'}
print output[len(s) > 5]
于 2012-07-15T12:53:35.143 に答える
0

別のバリエーション:

print len(s)>5 and 'y' or 'n'

完全を期すために追加しただけです。家でこれを試さないでください!;-)

于 2012-07-15T13:00:31.723 に答える