In Python habe ich eine Liste von Zeichenfolgen, von denen einige die leere Zeichenfolge sein können. Was ist der beste Weg, um die erste nicht leere Zeichenfolge zu erhalten?Erste nicht leere Zeichenfolge aus einer Liste in Python
Antwort
next(s for s in list_of_string if s)
Edit: py3k Beweis Version wie in den Kommentaren von Stephan202 beraten, danke.
'[]' wird Listenverstehen genannt. – SilentGhost
würde nicht funktionieren in py3k – SilentGhost
py3k version: 'next (s für s in list_of_string if s)'. – Stephan202
Um alle leeren Saiten zu entfernen,
[s for s in list_of_strings if s]
Um die erste nicht leere Zeichenfolge zu erhalten, einfach diese Liste erstellen und das erste Element erhalten, oder die faule Methode verwenden, wie durch wuub vorgeschlagen.
eine Zeile FTW! Ich liebe es. – Randolpho
Ein bisschen ineffizient, obwohl! Wenn Sie eine Million nicht leerer Stiche nach nur einem leeren haben, werden Sie Zeit und Speicher darauf verwenden, eine Liste von einer Million Strings zu erzeugen, nur um den ersten zu bekommen ... Verwenden Sie zumindest einen Generator! – Mapio
def get_nonempty(list_of_strings):
for s in list_of_strings:
if s:
return s
Weit weniger elegent als das Generator-Verständnis oben vorgeschlagen, fügt auch mehr Komplexität der soruce-Datei. –
Eleganz in den Augen des Betrachters, Daniel. Es funktioniert tadellos anders als die angenommene Antwortversion: das ist, was ausmacht – SilentGhost
um die erste, nicht leere Zeichenfolge in einer Liste zu erhalten, müssen Sie sie einfach durchlaufen und prüfen, ob sie nicht leer ist. das ist alles dazu.
arr = ['','',2,"one"]
for i in arr:
if i:
print i
break
Hier ist ein kurzer Weg:
filter(None, list_of_strings)[0]
EDIT:
Hier ist ein etwas längerer Weg, der ist besser:
from itertools import ifilter
ifilter(None, list_of_strings).next()
Warum ist der zweite Weg besser? –
Dies funktioniert nur in Python 2.x und ist weniger effizient als das Generatorbeispiel, weil 'filter 'unabhängig vom Inhalt über die gesamte Liste iteriert. In py3k gibt 'filter' ein Filterobjekt zurück, das nicht abzählbar ist. – Stephan202
@Fred: Der erste Weg wird durchlaufen und filtern Sie jede leere Zeichenfolge, erstellen Sie eine neue Liste und wählen Sie das erste Ergebnis. Der zweite Weg wird durch die Liste gehen, leere Strings herausfiltern, bis sie den ersten leeren findet und diesen zurückgibt. Es würde keine Zwischenliste erstellt. Wenn Sie beispielsweise eine Liste von 10.000 Strings haben und nur die erste leer ist, erstellt die erste Methode eine neue Liste von 9.999 Strings im Speicher, während die zweite nicht. –
Basierend auf Ihrer Frage Ich werde nehme viel an, aber um die erste nicht leere Zeichenfolge zu erhalten:
(i for i, s in enumerate(x) if s).next()
, die ihren Index in der Liste zurückgibt. Die Bindung "x" zeigt auf Ihre String-Liste.
- 1. So entfernen Sie eine leere Liste aus einer Liste (Java)
- 2. Informationen aus einer Zeichenfolge in Python extrahieren?
- 3. Trim leere Zeilenumbrüche aus Zeichenfolge in Ruby
- 4. Hinzufügen einer Zeichenfolge vor einer Zeichenfolge für jedes Element in einer Liste in Python
- 5. Erstellen einer Zeichenfolge aus einer Liste
- 6. Entfernen Sie das erste Wort in einer Python-Zeichenfolge?
- 7. Löschen einer Liste aus einer Liste basiert auf .count Python
- 8. eine Nummer aus einer Zeichenfolge in Python
- 9. Wie wähle ich das erste (zweite, ...) nicht leere Element in einer Excel-Liste?
- 10. Warum slice [: -0] leere Liste in Python
- 11. Wie das erste Element einer komplexen Liste in Python
- 12. JclLastExceptStackListToStrings erzeugt eine leere Zeichenfolge Liste
- 13. Extrahieren einer Zeichenfolge aus einer Textdatei in Python 2.7.5
- 14. Python: Finden Sie am nächsten Zeichenfolge (aus einer Liste) in eine andere Zeichenfolge
- 15. Finden Sie die erste nicht leere Zelle in einem Bereich
- 16. können nicht nicht leere Zeichenfolge aus PhoneStateListener bekommen :: onCallStateChanged
- 17. Wie preg_match erste Auftreten in einer Zeichenfolge
- 18. Python entfernen leere Elemente aus der Liste der Listen
- 19. Select Classes (Plugins) aus einer Python-Liste
- 20. Erste Prime in einer Liste von Zufallszahlen
- 21. Wie eine Zeichenfolge in einer Array-Liste suchen (Python-regex)
- 22. Liste in einer Zeichenfolge und Druckformatierung
- 23. leere Zeichenfolge in Oracle
- 24. Wie kann ich leere Zeichenfolge aus einer Mongodb-Sammlung entfernen?
- 25. MVC nicht bestätigt leere Zeichenfolge
- 26. Ganzzahl aus einer Liste extrahieren
- 27. erste leere Zeile in Excel
- 28. Konvertieren einer Zeichenfolge in eine Liste in Python
- 29. Konvertieren einer Zeichenfolge in eine Liste in Python
- 30. Alle Vorkommen von Wörtern in einer Zeichenfolge aus einer Python-Liste entfernen
Möchten Sie den Verweis auf die erste leere Zeichenfolge oder möchten Sie alle leeren Zeichenfolgen aus einer Liste entfernen? Wurde diese Liste zufällig aus einer Split-Zeichenfolge generiert? –
Aus Regex generiert: Übereinstimmungen = re.findall (r "foo (\ d +) | bar (\ d +)") - Ich möchte die erste nicht leere Zeichenfolge, wäre aber daran interessiert, alle leeren Zeichenfolgen zu entfernen (die Regex könnte länger werden). –
Titel Ihrer Frage entsprechen nicht dem Körper Ihrer Frage. Repariere einen von ihnen. – SilentGhost