2016-04-17 10 views
0

Ich habe Python-Code ähnlich die folgendenUmwandlung von mehrzeilige in Liste comphrension Python

for a in range(0,x): 
print("test") 
print("test2") 
if a%2==0: 
    l1.append(a) 

könnte es in Listenkomprehensionen umgewandelt werden, oder gibt es andere Art und Weise zu reduzieren.

+0

Die Schleife zwei Aufgaben hat. Ich würde es in zwei Teile teilen. –

Antwort

1

Die Erzeugung der Liste in eine Liste Verständnis umgewandelt werden, aber die print-Anweisungen können nicht in einer Zeile erfolgen:

x = 10 
l1 = [a for a in range(0, x) if a % 2 == 0] 

Sie geben die Liste, wenn Sie auch die print Anweisungen möchten, ist mehr Arbeit erforderlich, z definiert eine Funktion, während die Liste wird gebaut genannt wird:

def foo(a): 
    print('Test1') 
    print('Test2') 
    return a 

l2 = [a for a in range(0, x) if foo(a) % 2 == 0] 

Diese letztere Option ist jedoch „ein Code Geruch“, eine Liste zu erzeugen, während auf dem Nebeneffekt einer Funktion für die Ausgabe unter Berufung keine gute Praxis ist (sehr fehleranfällig in einem sogar mäßig großen Programm). Letzteres würde ich nicht empfehlen.

+1

so definiert, können Sie stattdessen "foo" in Bedingung verwenden, so dass der Druck die ganze Zeit statt der Hälfte der Zeit ausgeführt wird – Copperfield

+0

True! Ich habe die Antwort repariert, danke. – Cyb3rFly3r

1

"Könnte es in Liste Comprehensions umgewandelt werden"?

Es könnte sicher:

x = 10 
l1 = [a for a in range(x) if a % 2 == 0] 
+0

Es gibt keine Ausgabe –

+0

@PeterWood Nein, die 'print' Anweisungen sind nicht da. Es wäre einfach, sie einzubeziehen, aber ich entschied mich nicht, da es die beste Vorgehensweise ist, Listenergänzungen in sich abgeschlossen und frei von Nebenwirkungen zu halten. Außerdem dachte ich nicht, dass sie dem OP ohnehin sehr wichtig waren. – jDo

0

Nicht zu empfehlen, aber Sie können tatsächlich ausgegeben den Text und speichern Sie die Elemente, weil Druck eine Funktion in python3 ist:

l = [print("test\ntest2") or a for a in range(5) if not a % 2] 

In python2 würden Sie brauchen, um from __future__ import print_function