In Python ho un elenco di stringhe, alcune delle quali potrebbero essere la stringa vuota. Qual è il modo migliore per ottenere la prima stringa non vuota?Ottieni la prima stringa non vuota da un elenco in python
risposta
next(s for s in list_of_string if s)
Modifica.
'[]' è chiamato list comprehension. – SilentGhost
non funzionerebbe nella versione py3k – SilentGhost
py3k: 'next (s per s in list_of_string se s)'. – Stephan202
Per rimuovere tutte le stringhe vuote,
[s for s in list_of_strings if s]
Per ottenere la prima stringa non vuota, è sufficiente creare questa lista e ottenere il primo elemento, o utilizzare il metodo pigro come suggerito da wuub. Versione prova py3k come consigliato dal Stephan202 nei commenti, grazie:
def get_nonempty(list_of_strings):
for s in list_of_strings:
if s:
return s
Molto meno elegante della comprensione del Generatore suggerita sopra, aggiunge anche più complessità al file soruce. –
eleganza negli occhi di chi guarda, Daniel. Funziona perfettamente a differenza della versione della risposta accettata: questo è ciò che conta – SilentGhost
per ottenere la prima stringa non vuota in una lista, basta passarla sopra e controllare se non è vuota. questo è tutto ciò che c'è da fare.
arr = ['','',2,"one"]
for i in arr:
if i:
print i
break
Ecco un breve tratto:
filter(None, list_of_strings)[0]
EDIT:
Ecco un po 'più lungo modo che è meglio:
from itertools import ifilter
ifilter(None, list_of_strings).next()
Perché il secondo modo è migliore? –
Funziona solo in Python 2.x, ed è meno efficiente rispetto all'esempio generatore, perché 'filter' scorre su tutta la lista, indipendentemente dal contenuto. In py3k 'filter' restituisce un oggetto filtro, che è unsubscriptable. – Stephan202
@Fred: Il primo modo passerà e filtrerà ogni stringa vuota, creerà un nuovo elenco e selezionerà il primo risultato. Il secondo modo passerà attraverso l'elenco filtrando le stringhe vuote fino a trovare il primo vuoto e lo restituirà. Non verrà creata alcuna lista intermedia. Ad esempio, se si dispone di un elenco di 10.000 stringhe e solo il primo è vuoto, il primo metodo crea un nuovo elenco di 9.999 stringhe in memoria mentre il secondo no. –
In base alla tua domanda dovrò assumere molto, ma per "ottenere" la prima stringa non vuota:
(i for i, s in enumerate(x) if s).next()
che restituisce il suo indice nell'elenco. Il legame 'x' punta al tuo elenco di stringhe.
- 1. Ottieni la prima stringa prima del separatore?
- 2. Python: ottieni il primo carattere della prima stringa in un elenco?
- 3. Interrompi la stringa in un elenco di caratteri in Python
- 4. stringa vuota in HTML risultato reso da Django/Python
- 5. Sostituisce la prima occorrenza di stringa in Python
- 6. Come rimuovere una lista vuota da un elenco (Java)
- 7. Python: come verificare una stringa per sottostringhe da un elenco?
- 8. deserialize stringa vuota a un elenco <string>
- 9. Python regex spaccatura senza stringa vuota
- 10. Ottieni interruzioni da un elenco di volte
- 11. Ottieni un elenco file da TFS
- 12. python: elimina la directory non vuota
- 13. Differenza tra stringa vuota e stringa vuota ("")
- 14. Dividere un elenco python da un carattere in ogni elemento
- 15. Aggiungi a stringa se stringa non vuota
- 16. prima riga vuota in excel
- 17. Ottieni un elenco di valori di campo da sqlite3 di Python, non tuple che rappresentano righe
- 18. MVC non convalidare stringa vuota
- 19. Rimuovere la prima parola in una stringa Python?
- 20. django stringa vuota e vuota
- 21. Come restituire la prima variabile stringa che non è nulla o vuota
- 22. translate con stringa vuota
- 23. Python: come rimuovere solo prima parola da una stringa
- 24. Ottieni tuple uniche da List, Python
- 25. Impossibile ottenere stringa non vuota da PhoneStateListener :: onCallStateChanged
- 26. Ottieni sottostringhe da stringa in Liquid?
- 27. Angolare ng-mostra se la stringa non vuota non funziona
- 28. Conversione di una stringa in un elenco in Python
- 29. Verifica stringa vuota in Android
- 30. Come trovare la prima lettera maiuscola nella stringa usando python
Si desidera il riferimento alla prima stringa vuota o si desidera rimuovere tutte le stringhe vuote da un elenco? Questa lista è stata generata da una stringa divisa per caso? –
Generato da espressioni regolari: matches = re.findall (r "pippo (\ d +) | bar (\ d +)") - Voglio la prima stringa non vuota, ma sarei interessato a come rimuovere anche tutte le stringhe vuote (il regex potrebbe essere più lungo). –
il titolo della tua domanda non corrisponde al corpo della tua domanda. Risolvi uno di loro. – SilentGhost