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.