Domanda

Ho una lista di stringhe - qualcosa come

mytext = ['This is some text','this is yet more text','This is text that contains the substring foobar123','yet more text']

Voglio trovare la prima occorrenza di qualsiasi cosa che inizia con foobar. Se mi è stato grep allora io farei cercare foobar *. La mia soluzione attuale assomiglia a questo

for i in mytext:
    index = i.find("foobar")
    if(index!=-1):
        print i

che funziona bene, ma mi chiedo se c'è un modo 'migliore' (vale a dire più divinatorio) di fare questo?

Saluti, Mike

È stato utile?

Soluzione

È anche possibile utilizzare un elenco di comprensione:

matches = [s for s in mytext if 'foobar' in s]

(e se si fosse veramente alla ricerca di stringhe di partenza con 'foobar' come notato THC4k, considerare quanto segue:

matches = [s for s in mytext if s.startswith('foobar')]

Altri suggerimenti

Se si vuole veramente la prima occorrenza di una stringa che inizia con pippo (che è ciò che le tue parole dicono, anche se molto diverso dal codice, tutte le risposte fornite, la vostra menzione di grep - come contraddittorio si può ottenere -?) , provare:

found = next((s for s in mylist if s.startswith('foobar')), '')

questo dà una stringa vuota come risultato found se nessun elemento di mylist soddisfa la condizione. Si potrebbe anche usare itertools, ecc, al posto del semplice genexp, ma il trucco è fondamentale in questo modo di utilizzare il next incorporato con un valore predefinito (Python 2.6 e meglio solo).

for s in lst:
    if 'foobar' in s:
         print(s)
results = [ s for s in lst if 'foobar' in s]
print(results)

nel caso in cui si ha realmente alla ricerca di stringhe che inizio con foobar (non con foobar di loro):

for s in mylist:
  if s.startswith( 'foobar' ):
     print s

o

found = [ s for s in mylist if s.startswith('foobar') ]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top