поиск числа в массиве

есть ли в питоне быстрый способ найти числа в массиве, и вывести их.

filter_arr([1,2,'a','b']) чтобы вернуло [1,2]

любы числа 1,2,3,5,.... кроме отрицательных


Ответы (3 шт):

Автор решения: Zhihar

если массив неотсортированный, то все равно равно придется просмотреть все элементы, так что от O(n) никуда не деться,

если записи отсортированы, то легко провести бинарный поиск и найти границы отрицательных и положительных чисел, положительных чисел и не чисел (например, строк) и сложность будет O(log(n)), после чего выделить нужные вам числа, впрочем если условия сортировки задать так, чтобы натуральные числа были старше всего остального, а отрицательные целы больше, чем все кроме натуральных, тогда надо будет найти только 1 границу, а не 2

ну и остаётся вопрос, считать ли строки с числами - числами '123', 1e2, 0x12 и т.д.

→ Ссылка
Автор решения: Эникейщик

Если речь только о целых положительных (из комментария):

res = [el for el in arr if type(el) == int and el > 0]
→ Ссылка
Автор решения: Alexandr

Вот пример:

import numbers
arr = [1,2,'a','b']
print( list(filter(lambda x: isinstance(x , numbers.Number) , arr)) )
→ Ссылка