2016-07-25 4 views
0

Wie kann ich die folgende Schleife in einer Zeile schreiben? Oder ist das wegen der if-Anweisung nicht möglich?Python-Code komprimieren

a = listWithFancyIntegers 

for i in range(len(a)): 
    if a[i] < 0: 
     a[i] = 0 
    else: 
     a[i] = 1 

Was ich nicht haben möchte, ist eine Liste von booleans.

Ich habe bereits im Internet gesucht, um zu prüfen, ob ich etwas wie einen Lambda-Ausdruck verwenden kann, aber ich habe nichts gefunden, was mir geholfen hat. (Oder ich habe es nicht verstanden: D)

Vielen Dank für Ihre Unterstützung.

+0

'list_of_booleans = [Wert> = 0 für Wert in list_of_values]' –

Antwort

2
a = [0 if n < 0 else 1 for n in listWithFancyIntegers] 

EDIT

Ich bevorzuge ich oben schrieb, Code getan werden, aber hier ist eine andere Art und Weise:

a = [int(n >= 0) for n in listWithFancyIntegers] 

oder wenn Sie map bevorzugen, um zu listen on:

a = map(lambda n: int(n >= 0), listWithFancyIntegers) 
1

Dies kann in einer einzigen Zeile in Python

a = [0 if i < 0 else 1 for i in a]