Найти - Пользователи
Полная версия: Поиск большего, меньшего числа в списке, массиве
Начало » Python для новичков » Поиск большего, меньшего числа в списке, массиве
1
Kyrym
Подскажите, пожалуйста, как найти числа в списке по условию больше-меньше.
Питон 3.
Пример.
 A = [700, 400, 900]
a = 500
Требуется найти числа в массиве, которые меньше а, т.е. меньше 500.
Ответ: 400
Я пробовал 2 варианта через for и через фильтр - безуспешно.
Вариант 1
 A = [700, 400, 900]
a = 500
for i in A:
    if A[i] < a:
        N = i
        print(N)
Вариант 2
 A = [700, 400, 900]
a = 500
def f(x): return x < i
T = filter(f, A)
print(T)
Rodegast
 >>> a = [100, 500, 1000]
>>> filter(lambda x: x < 400, a)
[100]
marvellik
спокойно через for решается, даже в вашем варианте если исправить ошибку в 4-ой строке
 A = [700, 400, 900]
a = 500
print(*(i for i in A if i < a))
Kyrym
marvellik
даже в вашем варианте если исправить ошибку в 4-ой строке
а какая у меня ошибка в 4-ой строке? я хочу вывести числа меньше 500 как список.
Ваш вариант работает, но выводится просто текст.
Для списка вида
 A = [700, 400, 900, 250]
a = 500
print(*(i for i in A if i < a))

Получим: 250 400, а надо:
  [250, 400]

Rodegast, честно говоря, я получаю ответ вида: <filter object at 0x035732F0>
Что с этим делать не совсем пойму.
Пытался так, но выдаёт ошибку:
 aa = [100, 500, 1000]
print(filter(lambda x: x < 400, aa))
bb = ''.join.filter(lambda x: x < 400, aa)
print(bb)
Rodegast
> честно говоря, я получаю ответ вида: <filter object at 0x035732F0>

Это значит что у тебя третий питон. Там фильтр возвращает генератор и его надо в ручную преобразовать в словарь:
 list(filter(lambda x: x < 400, a))

> Пытался так, но выдаёт ошибку:

Нужно так:
 bb = ''.join(map(str, filter(lambda x: x < 400, aa)))
Kyrym
Rodegast, теперь всё чётко. Спасибо!
ZerG
Имхо мои 5 копеек
Если человек задает вопрос такого уровня - то было бы добрее ему отвечать в более примитивном виде
У мало мальски опытного программиста данная строка
 bb = ''.join(map(str, filter(lambda x: x < 400, aa)))
не вызовет еще больше непонимания нежели сам вопрос а вот у человека его задавшего напротив.


 # -*- coding: utf-8 -*-
# Список чисел
spisok = [700, 400, 900]
# Число для сравнения
param = 500
# Так как чисел может быть несколько создадим переменные (списки)
#  для хранения результатов
bolshe = []
menshe = []
# Проходимся по списку
for chislo in spisok:
    # Если член списка больше числа для сравнения
    if chislo > param:
        # добавляем его в переменную больше
        bolshe.append(chislo)
    # иначе
    else:
        # добавляем его в переменную меньше
        menshe.append(chislo)
print('Число для сравнения: ', param)
print('Числа больше: ', bolshe)
print('Числа меньше: ', menshe)

Разумеется код избыточен. Но человеку понятен механизм.
Вы бы уже сразу рагулярками писали примеры …
marvellik
Kyrym
а какая у меня ошибка в 4-ой строке?
а то что в цикле вы перебираете элементы списка
 for i in A:
а пытаетесь сравнить по индексу которого нет
 if A[i] < a:
надеюсь понятно что i принимает значения 700, 400, 900, 250 и вы хотите сравнить элемент списка с индексом 700,400, 900, 250
теперь ваш вариант в рабочем виде:
 A = [700, 400, 900]
a = 500
for i in range(len(A)):
    if A[i] < a:
        N = i
        print(N)
теперь надеюсь увидели ошибку?
Kyrym
ZerG, отличный пример, огромное спасибо!

marvellik
A = a = 500 for i in range(len(A)): if A < a: N = i print(N)
Решением данной программы являются индексы, да и форма вывода не та. Теперь я понял, как надо было написать код:
 A = [700, 400, 900, 250]
a = 500
N=[]
for i in A:
    if i < a:
        N.append(i)
print(N)
Ответом будет запись:
 [400, 250]
что, собственно, и требовалось.
ZerG
Не за что.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB