поиск числа в массиве
есть ли в питоне быстрый способ найти числа в массиве, и вывести их.
filter_arr([1,2,'a','b']) чтобы вернуло [1,2]
любы числа 1,2,3,5,.... кроме отрицательных
Ответы (3 шт):
если массив неотсортированный, то все равно равно придется просмотреть все элементы, так что от O(n) никуда не деться,
если записи отсортированы, то легко провести бинарный поиск и найти границы отрицательных и положительных чисел, положительных чисел и не чисел (например, строк) и сложность будет O(log(n)), после чего выделить нужные вам числа, впрочем если условия сортировки задать так, чтобы натуральные числа были старше всего остального, а отрицательные целы больше, чем все кроме натуральных, тогда надо будет найти только 1 границу, а не 2
ну и остаётся вопрос, считать ли строки с числами - числами
'123', 1e2, 0x12 и т.д.
Если речь только о целых положительных (из комментария):
res = [el for el in arr if type(el) == int and el > 0]
Вот пример:
import numbers
arr = [1,2,'a','b']
print( list(filter(lambda x: isinstance(x , numbers.Number) , arr)) )