Проверьте, есть ли элемент в массиве / списке

204

Если у меня есть массив строк, могу ли я проверить, находится ли строка в массиве без выполнения forцикла? В частности, я ищу способ сделать это в ifутверждении, так что-то вроде этого:

if [check that item is in array]:
SomeKittens
источник
3
Я думаю, что вопрос уже дан ответ здесь
Тарун Анде
1
Или лучше здесь: stackoverflow.com/questions/12934190/…
torina

Ответы:

397

Предполагая, что вы имеете в виду «список», где вы говорите «массив», вы можете сделать

if item in my_list:
    # whatever

Это работает для любой коллекции, а не только для списков. Для словарей он проверяет, присутствует ли данный ключ в словаре.

Свен Марнах
источник
1
@jdi, и этот цикл будет работать намного быстрее, чем тот, который явно написан на Python, не говоря уже о том, что его легче читать.
Марк Рэнсом
17

Я также собираюсь предположить, что вы имеете в виду «список», когда вы говорите «массив». Решение Свена Марнача хорошо. Если вы собираетесь проводить повторные проверки в списке, то, возможно, стоит преобразовать его в набор или Frozenset, который может быть быстрее для каждой проверки. Предполагая, что ваш список strs называется subjects:

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever
Майкл Хоффман
источник
3

Используйте лямбда-функцию.

Допустим, у вас есть массив:

nums = [0,1,5]

Проверьте, есть ли 5 ​​в nums:

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

Это решение является более надежным. Теперь вы можете проверить, есть ли в вашем массиве любое число, удовлетворяющее определенному условиюnums .

Например, проверьте, существует ли любое число, которое больше или равно 5 в nums:

(len(filter (lambda x : x >= 5, nums)) > 0)
Marquistador
источник
Это работает с Python2. С Python 3.7 вы получите эту ошибку:TypeError: object of type 'filter' has no len()
Jun711
1

Вы должны использовать .values ​​для массивов. например, скажем, у вас есть датафрейм с именем столбца, т. е. test ['Name'], вы можете сделать

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

для нормального списка вам не нужно использовать .values

Сэм Комо
источник
Я думаю, что вам нужен объект Pandas DataFrame, чтобы использовать .values.
troymyname00
-3

Вы также можете использовать тот же синтаксис для массива. Например, поиск в серии Pandas:

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

if item in ser.values:
    # do stuff
BCR
источник