2016-11-16 6 views
1

Ich habe einen wirklich verdichteten Codeabschnitt gefunden, der eine for-Schleife und eine if-Anweisung verwendet, um alle Zahlen innerhalb einer Zeichenfolge zu finden und sie zu einer Liste hinzuzufügen. Das Problem ist, dass ich nicht verstehe, warum es funktioniert.So erstellen Sie eine kondensierte For-Schleife innerhalb einer Liste

string = "h3110 23 cat 444.4 rabbit 11 2 dog" 
alist = [int(s) for s in string.split() if s.isdigit()] 
print (alist) 

diese druckt ['23', '11', '2']

Es gibt zwei Bits ich nicht bekommen:

  1. Wie wird "s" in int (n) in Zeile 2 definiert ist, auch wenn es eingegeben wird vor der for-Schleife?
  2. Warum funktioniert dieser Code ohne else/return/pass/etc? Argument inplace für die if-Anweisung?

Dieser Code im Grunde macht folgendes:

alist = [] 
for s in string.split(): 
    if s.isdigit(): 
     alist.append(s) 
    else: 
     pass 
print (alist) 

Antwort

0

Der Einzeiler genau das tut, was Sie unten geschrieben, außer dass s in eine ganze Zahl umgewandelt wird (es sollte alist.append(int(s)) sein).

Wie funktioniert der Einzeiler? Es erstellt eine neue Liste aller Elemente einer vorhandenen Liste (in Ihrem Fall ist die vorhandene Liste string.split()), für die die Bedingung nach if gilt - dass das Element tatsächlich eine Ziffer ist.

3

Dies ist keine For-Schleife in einer Liste. Es ist eine spezielle Syntax in Python, die "List Comprehension" genannt wird. Die grundlegende Syntax lautet: [<expression> for <var> in <iterable>] oder mit einer optionalen Bedingung: [<expression> for <var> in <iterable> if <condition>]. Er übersetzt grundsätzlich:

new_list = [] 
for <var> in <iterable>: 
    if <condition>: 
     new_list.append(<expression>) 

Es klingt wie Sie es richtig verstanden habe, einfach nicht bewusst waren, dass diese spezielle Syntax ist, weshalb es sieht aus wie es versucht, eine Variable zuzugreifen, die noch nicht erklärt oder definiert ist. Wenn Sie interessiert sind, finden Sie weitere Informationen über ihre Funktionsweise hier: http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/

Verwandte Themen