Sprawdź, czy element znajduje się w tablicy / liście

203

Jeśli mam tablicę ciągów, czy mogę sprawdzić, czy ciąg znaków znajduje się w tablicy bez wykonywania forpętli? W szczególności szukam sposobu, aby to zrobić w ifinstrukcji, więc coś takiego:

if [check that item is in array]:
SomeKittens
źródło
3
Myślę, że odpowiedź na to pytanie jest już dostępna tutaj
Tarun Ande
1
Lub lepiej tutaj: stackoverflow.com/questions/12934190/…
torina

Odpowiedzi:

395

Zakładając, że masz na myśli „listę”, w której mówisz „tablicę”, możesz to zrobić

if item in my_list:
    # whatever

Działa to w przypadku każdej kolekcji, nie tylko list. W przypadku słowników sprawdza, czy dany klucz jest obecny w słowniku.

Sven Marnach
źródło
1
@jdi, a ta pętla będzie działać znacznie szybciej niż ta, która jest wyraźnie zakodowana w Pythonie, nie mówiąc już o łatwiejszym czytaniu.
Mark Ransom
17

Zakładam również, że masz na myśli „lista”, kiedy mówisz „tablica”. Rozwiązanie Svena Marnacha jest dobre. Jeśli zamierzasz powtarzać kontrole na liście, warto przekonwertować ją na zestaw lub zestaw zamrożony, co może być szybsze dla każdej kontroli. Zakładając, że twoja lista strów nazywa się subjects:

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever
Michael Hoffman
źródło
3

Użyj funkcji lambda.

Powiedzmy, że masz tablicę:

nums = [0,1,5]

Sprawdź, czy 5 jest w nums:

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

To rozwiązanie jest bardziej niezawodne. Możesz teraz sprawdzić, czy w Twojej tablicy znajduje się dowolna liczba spełniająca określony waruneknums .

Na przykład sprawdź, czy istnieje dowolna liczba większa lub równa 5 w nums:

(len(filter (lambda x : x >= 5, nums)) > 0)
Marquistador
źródło
Działa to z Python2. W Pythonie 3.7 pojawi się ten błąd:TypeError: object of type 'filter' has no len()
Jun711,
1

Musisz użyć .values ​​dla tablic. na przykład powiedzmy, że masz ramkę danych, która ma nazwę kolumny, tzn. przetestuj [„Nazwa”], możesz to zrobić

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

dla normalnej listy nie musisz używać wartości

sam komo
źródło
Myślę, że potrzebujesz obiektu Pandas DataFrame do korzystania z .values.
troymyname00
-3

Możesz także użyć tej samej składni dla tablicy. Na przykład wyszukiwanie w serii Pandy:

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

if item in ser.values:
    # do stuff
BCR
źródło