Как итератор по непустой последовательности без фильтрации и без агрегации (sum()
и т. Д.) Ничего не дает?Python: итерация по непустому списку без if-clause становится пустой. Зачем?
Рассмотрим простой пример:
sequence = ['a', 'b', 'c']
list((el, ord(el)) for el in sequence)
[('a', 97), ('b', 98), ('c', 99)]
Это дает, как и ожидалось.
Теперь просто поменять ord(el)
за выражение, которое принимает первое значение из некоторого генератора с использованием (...).next()
- простите надуманный пример:
def odd_integers_up_to_length(str):
return (x for x in xrange(len(str)) if x%2==1)
list((el, odd_integers_up_to_length(el).next()) for el in sequence)
Это дает []
. Да, пустой список. Нет ('a',
)
кортежи. Ничего.
Но мы не фильтруем, не агрегируем и не уменьшаем. Выражение генератора над объектами n
без фильтрации или агрегации должно давать n
объектов, не так ли? Что происходит?
Wow ... вы вообще связали с hekevintran (http://stackoverflow.com/users/84952/hekevintran)? Задайте вопрос. Ответьте на это почти сразу. –
Неужели это плохая вещь? Я просто делился своим наблюдением в форме вопроса, как и с the FAQ: «Также прекрасно спросить и ответить на свой собственный вопрос программирования, но притворяйтесь, что вы находитесь под угрозой: произнесите его в форме вопроса». –
My n00b warts покажут :) ... эта ссылка должна быть http://stackoverflow.com/faq, конечно, –