2013-02-13 63 views
6

我想爲下面的分支,如果任何一個更Python的方式:是否有更優雅的pythonic方式表達下列條件表達式?

if a<b: 
    a.append('value') 
elif a==b: 
    b.append('value') 
else: 
    do nothing 

是否有任何三元運算符?

+0

_Pythoniceans_ ** **愛字_pythonic_,即使它意味着什麼。 – 2013-02-13 10:12:38

+5

使用6行有什麼問題? – 2013-02-13 10:13:08

+1

這可能是最好的方法來做到這一點,如果你的三個'做某事'是非常不同的。如果他們可以參數化,分支可以寫得更簡潔。告訴我們更多關於你的'做某事'的信息。 – eumiro 2013-02-13 10:14:13

回答

4

使用嵌套三元運算符。

func1() if a<b else func2() if a==b else func3() 

爲您具體的例子:

a.append('value') if a<b else b.append('value') if a==b else None 
+7

現在你讓我在高爾夫球的心情'[func2,func3,func1] [cmp(a,b)]()' – 2013-02-13 10:16:21

1

你可以做這樣的事情:

result = a<b and first_action or a==b and second_action or third_action 

其中* _action符合 「做某事」 的代碼在你的問題

+0

雖然'和/或'欺騙它的作品,它只是使其更容易閱讀imo。 – 2013-02-13 10:15:57

+0

@AttilaO。我認爲欺騙是一個主要的形容詞。短切AND邏輯在大多數語言中都很常見......而我是一名粉絲:) – 2013-02-13 10:18:47

1

您的

if a<b: 
    a.append('value') 
elif a==b: 
    b.append('value') 
else: 
    do nothing 

不能被重寫,它是可以的,因爲它是。也許只是刪除最後兩行(否則/什麼也不做)。

我在這裏看到的唯一的參數化是:

if a <= b: 
    (a,b)[a==b].append('value') 

但是這只是醜陋。

+0

這是不正確的,因爲 curious 2013-02-13 10:19:57

+1

@curious。是的,他認爲它們只是不同的。清楚地再看看答案。 – 2013-02-13 10:22:46

+0

@curious - 是嗎?只有在a <= b'的情況下,它纔會執行*任何操作。然後根據「a eumiro 2013-02-13 10:22:49

0

爲了您確切情況下,這些人會工作:

[b, a, []][cmp(x, y)].append('value') 
[b, a, []][cmp(x, y)] += ['value'] 

請不要這樣做。您目前的代碼很容易閱讀。

+0

我開始某種高爾夫比賽嗎? – Volatility 2013-02-13 10:23:30

+1

@Volatility:我希望如此 – Blender 2013-02-13 10:23:57

4

顯然,你可以離開其他情況下關閉

if a<b: 
    a.append('value') 
elif a==b: 
    b.append('value') 
+0

這是唯一的_real_改進。 – georg 2013-02-13 12:43:19