Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 17, 2012 03:01:57

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

py.user.next
для len() нужен список

>>> len(xrange(6))
6
>>> len(x for x in xrange(6))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'generator' has no len()
Странно. А посчитать количество элементов, не сохраняя все в список, можно?

Офлайн

#2 Авг. 17, 2012 03:46:55

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

>>> type(xrange(5))
<type 'xrange'>
>>> type(x for x in xrange(5))
<type 'generator'>
odnochlen
А посчитать количество элементов, не сохраняя все в список, можно?
sum(1 for x in xrange(5))

Только зачем тогда использовать генератор?
http://docs.python.org/glossary.html#term-generator
generator
A function which returns an iterator.

Each yield temporarily suspends processing, remembering the location execution state (including local variables and pending try-statements). When the generator resumes, it picks-up where it left-off (in contrast to functions which start fresh on every invocation).

Офлайн

#3 Авг. 17, 2012 06:04:58

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

Простой вопрос по синтаксису, квадратные скобки

>>> matr = [[1, -1, 2, -2, 3], [1, -1, 2, -2, -3]]
>>> sum(i < 0 for i in sum(matr, []))
5
>>>

odnochlen
>>> len(xrange(6))
6
>>>
xrange() возвращает “xrange object”

в третьем питоне для типа range поддерживаются также и срезы
>>> range(1, 10)[2:5]
range(3, 6)
>>>



Отредактировано py.user.next (Авг. 17, 2012 06:05:16)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version