Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 20, 2011 09:16:55

Fibio
От:
Зарегистрирован: 2010-09-14
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

ф-ция filter

Изучаю python, все очень понятно и просто, но иногда, поведение некоторых ф-ций заводит в тупик. Например про округленич целые трактаты… но я собстевнно не об этом. Поясните люди добрые почему так:

def func():
s = [range(-5, 5)]
print s
new = filter((lambda x: x>0), range(-5, 5))
print new
new = filter((lambda x: x>0), s)
print new
результат:
[[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]] #s
[1, 2, 3, 4]#new1
[[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]]#new2
почему во в тором варианте, когда я подставляю s а не range, filter не срабатывает?
и правда ли что в python 3+ ф-ций filter и reduce не будет?



Офлайн

#2 Сен. 20, 2011 09:35:14

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

ф-ция filter

Потому что в s у вас не список целых чисел, а список из одного элемента - списка целых чисел:

[]

чтобы был список чисел надо:

s = range(-5, 5)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Сен. 20, 2011 09:42:06

Fibio
От:
Зарегистрирован: 2010-09-14
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

ф-ция filter

ой, спасибо, не заметила



Офлайн

#4 Сен. 22, 2011 03:16:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

ф-ция filter

new = filter(lambda x: x > 0, s[0])
если именно такую s надо

>>> s = [range(-5, 6)]
>>> s
[[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]]
>>> new = filter(lambda x: x > 0, s[0])
>>> new
[1, 2, 3, 4, 5]
>>>



Отредактировано (Сен. 22, 2011 03:18:37)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version