Форум сайта python.su
Есть ли в генераторах возможность сохранять некоторое промежуточное значение? (для python 2.5-2.7)
Например для оптимизации такого генератора:
data = [line.split()[2:] for line in open('/some/file') if line.split()[2] == 'var1' and line.split()[3] == 'var2']
Офлайн
Записать по кускам? Заодно и более читаемо
lines = (line for line in open('/some/file')) splited_lines = (line.split() for line in lines) data = [x[2:] for x in splited_lines if x[2] == 'var1' and x[3] == 'var2']
Офлайн
agrynНет. Нужно понимать, что list comprehensions, созданы не для таких извращений.
Есть ли в генераторах возможность сохранять некоторое промежуточное значение?
data = [] for line in open('/some/file’): line_sp = line.split() if line_sp[2] == 'var1' and line_sp[3] == ‘var2’: data.append(line_sp[2:])
Отредактировано Budulianin (Авг. 12, 2014 19:49:29)
Офлайн
PooHСогласен с Вами, только я бы так написал:
Записать по кускам? Заодно и более читаемо
lines = map(str.split, open("/some/file")) data = [x[2:] for x in lines if x[2:4] == ('var1', 'var2')]
Офлайн
pyuserУ вас уже в первой строке создается список, в моем варианте везде генераторы, список создается только в конце. Теперь представим что в файле 10050 строк и их них десяток нужных, как у нас потрблением памяти?
Согласен с Вами, только я бы так написал:lines = map(str.split, open("/some/file")) data = [x[2:] for x in lines if x[2:4] == ('var1', 'var2')]
>>> [0, 1] == (0,1) 2: False
Отредактировано PooH (Авг. 13, 2014 05:15:23)
Офлайн
PooHВ третьем вроде же нет?
У вас уже в первой строке создается список
Офлайн
FishHookСтранное замечание, если учесть, что у pyuser всего две строчки :)
В третьем вроде же нет?
Офлайн
Записать по кускам? Заодно и более читаемоНикуда не годится.
lines = (line for line in open('/some/file'))
splited_lines = (line.split() for line in lines)
data = [x for x in splited_lines if x == ‘var1’ and x == ‘var2’]
Нет. Нужно понимать, что list comprehensions, созданы не для таких извращений.Полностью согласен.
Пишите код для людей.
Офлайн
FishHook
В третьем вроде же нет?
PooHБлин, только дошло - речь про третий питон :) ага, в третьем итератор, но ТС про вторую ветку спрашивает
FishHook
В третьем вроде же нет?
Странное замечание, если учесть, что у pyuser всего две строчки :)
Офлайн
scopicholЧто не годится? Разуйте глаза, там нет списков, там генераторы, список появляется в последний момент из уже отфильтрованных данных.
Никуда не годится.
Это ж работа с файлом. Какие списки.
Офлайн