2013-01-22 20 views
54

Powiel możliwe:
Ternary conditional operator in PythonPython if-else krótkim ręka

Chcę wykonać następujące czynności w Pythonie:

while(i < someW && j < someX){ 
    int x = A[i] > B[j]? A[i++]:B[j++]; 
    .... 
} 

Oczywiste jest, gdy albo i lub j trafienie limitu, kod wyrwie się z pętli. Potrzebuję wartości i i j poza pętlą.

muszę naprawdę zrobić

x=0 
... 
if A[i] > B[j]: 
    x = A[i] 
    i+=1 
else: 
    x = B[j] 
    j+=1 

Albo czy ktoś wie o krótszej drodze?

Oprócz wyżej, mogę Python wspierać coś podobnego do

a,b=5,7 
x = a > b ? 10 : 11 
+0

@MartijnPieters: druga część z pewnością jest duplikatem, ale nie jestem pewien co do pierwszej. – DSM

+0

@DSM: Cóż, pierwsza część nie będzie potrzebna, gdy PO zostanie odkrytych kolejne pytonowe struktury i pętle. Czy zamierzasz napisać pełne wprowadzenie do iteratorów? –

+0

@DSM: Ja też nie widzę nikogo poniżej adresowania tej części. ;-) –

Odpowiedz

8

Spróbuj tego:

x = a > b and 10 or 11 

To jest przykład realizacji:

>>> a,b=5,7 
>>> x = a > b and 10 or 11 
>>> print x 
11 
+12

'10 jeśli a> b else 11'. Nie trzeba uciekać się do operatorów boolowskich. –

+0

@MartijnPieters: dobra rada, sir. :) – DonCallisto

+0

Dzięki. Działa to dla drugiej części mojego pytania. W górę głosuj! – learner

132

Najbardziej czytelny sposób to

x = 10 if a > b else 11 

ale można użyć and i or też:

x = a > b and 10 or 11 

W „Zen Pythona”, mówi, że „liczy się czytelność”, chociaż, tak iść na pierwszy sposób.

Co więcej, i-lub trik nie powiedzie się, jeśli wstawisz zmienną zamiast 10 i otrzymasz wartość False.

Jednak, jeśli więcej niż zadania zależy od tego warunku, będzie to bardziej czytelne napisać go jak trzeba:

if A[i] > B[j]: 
    x = A[i] 
    i += 1 
else: 
    x = A[j] 
    j += 1 

chyba umieścić i i j w pojemniku. Ale jeśli pokażesz nam, dlaczego tego potrzebujesz, może się okazać, że tego nie potrzebujesz.

+4

dodane w Pythonie 2.5 –

+0

Dzięki. Działa to dla drugiej części mojego pytania. W górę głosuj! – learner

+0

Edytowałem, aby pokazać, że potrzebuję 'j' i' i' poza pętlą while. – learner

Powiązane problemy