2016-05-22 8 views
0

Die nächsten Schleifen gibt einen Wert von 3 für count Parameter:Was ist der Unterschied zwischen Python-Listenverständnis und normaler Schleife?

for line in textfile.text.splitlines(): 
    count += 1 if 'hostname' in line else 0 

jedoch versucht, die Verwendung derselben Liste Verständnis 1 zu tun gibt:

count += 1 if ['hostname' in line for line in textfile.text.splitlines()] else 0 

Wo habe ich falsch gemacht?

+0

FYI, es heißt List Verständnis, nicht einzelne Zeile Schleife. –

Antwort

2

List Comprehensions sind Abkürzungen für die Erstellung von Listen. Das Folgende ist (grob) äquivalent:

result = [] 
for item in l: 
    if condition(item): 
     result.append(item.attribute) 

result = [item.attribute for item in l if condition(item)] 

So Ihr Code

count += 1 if ['hostname' in line for line in textfile.text.splitlines()] else 0 

wäre das gleiche wie

result = [] 
for line in textfile.text.splitlines(): 
    result.append('hostname' in line) 

count += 1 if result else 0 

die als

offensichtlich nicht das gleiche ist
for line in textfile.text.splitlines(): 
    count += 1 if 'hostname' in line else 0 

stattdessen könnten Sie Dinge tun wie

count += sum([1 for line in textfile.text.splitlines() if 'hostname' in line]) 
1

Versuchen Sie, diese -

count += len([line for line in textfile.text.splitlines() if 'hostname' in line]) 
+1

perfekt! Vielen Dank! –

0

Dies liegt daran, in zweiten Fall Ihre wenn die Bedingung nur einmal ausgeführt wird.

Ihre zweite Anweisung bedeutet count + = 1 wenn listobject else 0;

Hier ist das Listenobjekt nicht None, also wird count + = 1 einmal ausgeführt.

Verwandte Themen