Python: se l’elenco contiene la stringa di stampa di tutti gli indici / elementi nella lista che contengono

Sono in grado di rilevare le partite, ma in grado di individuare dove sono.

Dato il seguente elenco:

['A second goldfish is nice and all', 3456, 'test nice']

Ho bisogno di ricerca per partita (cioè il “bello”) e la stampa di tutti gli elementi della lista che lo contengono. Idealmente se la parola chiave per la ricerca sono stati “bello” i risultati dovrebbero essere:

'A second goldfish is nice and all'
'test nice'

Ho:

list = data_array
string = str(raw_input("Search keyword: "))
print string
if any(string in s for s in list):
    print "Yes"

In modo che trova la partita e stampe, la parola chiave e “Sì” ma non mi dice dove si trova.

Devo scorrere ogni indice in lista e per ogni iterazione di ricerca “stringa s” o c’è un modo più facile per farlo?

InformationsquelleAutor | 2014-01-16

 

3 Replies
  1. 2

    Provare questo:

    list = data_array
    string = str(raw_input("Search keyword: "))
    print string
    for s in list:
        if string in str(s):
            print 'Yes'
            print list.index(s)

    Editted per esempio. Se si desidera solo il primo corrispondente indice che si può rompere anche dopo l’istruzione if restituisce true

    • L’ho fatto, mi ha detto che la lista non contiene indice. Io credo di non solo di ottenere dal loop attraverso ogni record e la ricerca in ogni momento. È solo un metodo lento.
    • Questo non funziona, perché string in s restituisce True se string è una sottostringa di s, ma list.index(string) solo trovare dove è la stringa è un element in list.
    • Ho editato per correggere questo DSM. C’è un vantaggio per l’utilizzo delle list comprehensions come postato da Dan e bainikolaus? Trovo che la mia versione molto più leggibile
  2. 3
    matches = [s for s in my_list if my_string in str(s)]

    o

    matches = filter(lambda s: my_string in str(s), my_list)

    Nota che 'nice' in 3456 genererà un TypeError, che è il motivo per cui ho usato str() sulla lista di elementi. Se appropriato dipende se si desidera prendere in considerazione '45' per essere in 3456 o non.

Lascia un commento