Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 28, 2016 13:31:13

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

Подскажите, пожалуйста, как найти числа в списке по условию больше-меньше.
Питон 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)

Отредактировано Kyrym (Дек. 28, 2016 15:04:50)

Офлайн

#2 Дек. 28, 2016 13:39:43

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2823
Репутация: +  185  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

 >>> a = [100, 500, 1000]
>>> filter(lambda x: x < 400, a)
[100]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Дек. 28, 2016 14:57:12

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

спокойно через for решается, даже в вашем варианте если исправить ошибку в 4-ой строке

 A = [700, 400, 900]
a = 500
print(*(i for i in A if i < a))

Офлайн

#4 Дек. 28, 2016 15:22:47

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

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)

Офлайн

#5 Дек. 28, 2016 15:29:39

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2823
Репутация: +  185  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

> честно говоря, я получаю ответ вида: <filter object at 0x035732F0>

Это значит что у тебя третий питон. Там фильтр возвращает генератор и его надо в ручную преобразовать в словарь:

 list(filter(lambda x: x < 400, a))

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

Нужно так:
 bb = ''.join(map(str, filter(lambda x: x < 400, aa)))



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Дек. 28, 2016 15:31:57)

Офлайн

#6 Дек. 28, 2016 15:46:59

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

Rodegast, теперь всё чётко. Спасибо!

Офлайн

#7 Дек. 28, 2016 15:56:53

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

Имхо мои 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)

Разумеется код избыточен. Но человеку понятен механизм.
Вы бы уже сразу рагулярками писали примеры …



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Дек. 28, 2016 15:58:25)

Офлайн

#8 Дек. 28, 2016 18:09:37

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

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)
теперь надеюсь увидели ошибку?

Отредактировано marvellik (Дек. 28, 2016 18:10:27)

Офлайн

#9 Дек. 29, 2016 08:20:38

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

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]
что, собственно, и требовалось.

Офлайн

#10 Дек. 29, 2016 08:58:05

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Поиск большего, меньшего числа в списке, массиве

Не за что.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version