Controlla se l'articolo è in un array / elenco


203

Se ho una matrice di stringhe, posso controllare per vedere se una stringa è nella matrice senza fare un forciclo? In particolare, sto cercando un modo per farlo all'interno di una ifdichiarazione, quindi qualcosa del genere:

if [check that item is in array]:

3
Penso che la domanda abbia già una risposta qui
Tarun Ande,


Risposte:


396

Supponendo che tu intenda "elenco" dove dici "array", puoi farlo

if item in my_list:
    # whatever

Funziona con qualsiasi collezione, non solo con le liste. Per i dizionari, controlla se la chiave fornita è presente nel dizionario.


1
@jdi, e quel ciclo verrà eseguito molto più velocemente di quello codificato esplicitamente in Python, per non parlare della facilità di lettura.
Mark Ransom,

17

Suppongo anche che intendi "elenco" quando dici "array". La soluzione di Sven Marnach è buona. Se eseguirai ripetuti controlli nell'elenco, potrebbe valere la pena convertirlo in un set o frozenset, che può essere più veloce per ogni controllo. Supponendo che il tuo elenco di strs si chiami subjects:

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever

3

Usa una funzione lambda.

Supponiamo che tu abbia un array:

nums = [0,1,5]

Controlla se 5 è in nums:

(len(filter (lambda x : x == 5, nums)) > 0)

Questa soluzione è più robusta. È ora possibile verificare se nell'array è presente un numero che soddisfa una determinata condizionenums .

Ad esempio, controlla se esiste un numero maggiore o uguale a 5 in nums:

(len(filter (lambda x : x >= 5, nums)) > 0)

Funziona con Python2. Con Python 3.7, otterrai questo errore:TypeError: object of type 'filter' has no len()
Jun711,

1

Devi usare .values ​​per gli array. per esempio dire che hai un frame di dati che ha un nome di colonna, ad esempio test ['Nome'], puoi farlo

if name in test['Name'].values :
   print(name)

per un normale elenco non è necessario utilizzare .values


Penso che tu abbia bisogno di un oggetto Pandas DataFrame per usare .values.
troymyname00,

-3

È inoltre possibile utilizzare la stessa sintassi per un array. Ad esempio, la ricerca all'interno di una serie di Pandas:

ser = pd.Series(['some', 'strings', 'to', 'query'])

if item in ser.values:
    # do stuff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.