2017-05-13 2 views
-1

Unter der Annahme, dass eine Liste, dort zu arbeiten, ich bin, ob diese beiden Zeilen Code nicht sicher, ob die gleichen Rückgabewerte haben:Sind diese beiden Generatorausdrücke dasselbe?

sum(lst[i] for i in lst[:-1] if lst[i]<0) 

sum(lst[i] for i in range(len(lst)-1) if lst[i]<0) 

Außerdem konnte ich sum(lst[i]... mit sum(i... und immer noch genau das gleiche ersetzt haben Ergebnis?

+0

Nein, die erste verwendet "i" falsch, also sind sie nicht gleichwertig. Die erste wird nicht funktionieren. –

+0

Sie haben auch * Generatorausdrücke *, nicht Listenergänzungen. Keine Liste wird erstellt. –

+1

"Ich bin mir nicht sicher, ob diese beiden Codezeilen dieselben Rückgabewerte haben." Warum versuchst du nicht, beides zu tun und zu sehen? – DeepSpace

Antwort

0

In der ersten durchlaufen Sie die Elemente lst; Do nicht Verwenden Sie diese Werte als Index. Stattdessen nur die Werte direkt verwenden:

sum(elem for elem in lst[:-1] if elem < 0) 

I i-elem umbenannt dies deutlicher zu machen; Jetzt ist es das Äquivalent zu Ihrer zweiten Version, wo Sie Indizes verwenden, die von range() generiert werden.

Wenn Sie bereits eine Sequenz haben und über die Werte iterieren müssen, ist es selten erforderlich, range() zu verwenden, um stattdessen Indizes zu erstellen.

Verwandte Themen