2012-08-03 6 views
6

Ich habe eine Liste von Zeichenfolgen. Ich möchte eine neue Liste erhalten, die Elemente ausschließt, die mit "#" beginnen, während die Reihenfolge beibehalten wird. Was ist der pythischste Weg dazu? (vorzugsweise keine Schleife verwenden?)Welcher Python ist am besten, um Elemente einer Liste auszuschließen, die mit einem bestimmten Zeichen beginnen?

+1

Klingt wie Sie Kommentare aus einer Datei ausschließen möchten. Die Antwort lautet in diesem Fall: "Lies sie nicht erst ein". –

Antwort

20
[x for x in my_list if not x.startswith('#')] 

Das ist die pythischste Art, es zu tun. Jede Möglichkeit, dies zu tun, wird am Ende eine Schleife in Python oder C verwenden.

7

Keine Schleife verwenden? Es gibt filter builtin:

filter(lambda s: not s.startswith('#'), somestrings) 

Beachten Sie, dass in Python 3 kehrt iterable, nicht eine Liste, und so können Sie es mit list() wickeln müssen.

+0

Welches ist mehr Python? mit einer Schleife oder Filter? – theRealWorld

+3

@MoZo-Listen-Comprehensions werden gegenüber 'Filter',' Map' usw. bevorzugt, wenn sie mit einem 'Lambda' gepaart sind. 'filter' könnte besser sein, wenn Sie etwas wie' filter (str.isalpha, somestrings) 'haben. Dies ist auch langsamer als eine Liste comp. – jamylak

+3

@MoZo Ich sehe hier keinen großen Unterschied. In diesem einfachen Fall würde ich mit einer Schleife gehen. Aber wenn die Prädikatfunktion kompliziert ist, ist es nur "Filter". – hamstergene

Verwandte Themen