Comments 27
Эти «выражения» в Python называются генераторами, надо бы это как-то выделить, и про них уже писали
+1
Вы меня опередили :)
0
Согласен, что «Однострочные выражения» — не самый изящный перевод, но лучше не придумал и не нагуглил стандартного русского названия.
А генераторы — это немного другое.
А генераторы — это немного другое.
0
А генераторы — это немного другое.
В русскоязычной литературе, что читал, это называлось генераторы-функции. А то, о чем пост — генераторы списков или выражения-генераторы.
Что касается гугления русского названия — википедия дает ответ. Если в ней найти «List comprehension» (взял из оригинала), и перейти на русскую версию, можно познакомиться с термином «Списковое включение (Абстракция списков)». С данным термином встречаюсь впервые, полагаю, является обобщенным для всех языков.
+1
Убедительно. Исправил. Спасибо)
0
А еще к оригинальной статье есть отличный комментарий
Вроде как добавили генераторы словарей в Python 3, а потом бэкпортировали во 2 ветку
But be aware that dict comprehensions works only in Python 2.7+.
in Python 2.6 and below you can replace it with:
dict((key, value) for item in list if condition)
Вроде как добавили генераторы словарей в Python 3, а потом бэкпортировали во 2 ветку
0
Кстати, мне лично нравится название genexp — generator expression.
0
List comprehensions — списковые выражения (кажется так в перводе Лутца).
Мне не кажется удачным использование слова «генератор», потому что генератора тут нет.
Мне не кажется удачным использование слова «генератор», потому что генератора тут нет.
0
Вот из Лутца прямо
Вы придираетесь к слову «генератор», в данном случае «генератор списка» — это то, что создает список, не более
Вы придираетесь к слову «генератор», в данном случае «генератор списка» — это то, что создает список, не более
+1
Значит я ошибся с источником этого знания у меня :)
Ну, это только потому что в оригинальном термине нет слова генератор, но в языке, при этом существуют генераторы и они не тоже самое что List comprehensions.
Понятно, что споры о переводе/формулировках ерундовые, но всё же я не удержусь, извините.
Если
это генератор списка.
То как назвать:
Выражение-генератор?
Как-то путано выходит слишком, по моему.
Вы придираетесь к слову «генератор», в данном случае «генератор списка» — это то, что создает список, не более
Ну, это только потому что в оригинальном термине нет слова генератор, но в языке, при этом существуют генераторы и они не тоже самое что List comprehensions.
Понятно, что споры о переводе/формулировках ерундовые, но всё же я не удержусь, извините.
Если
L = [x for x in range(1, 10)]
это генератор списка.
То как назвать:
L = (x for x in range(1, 10))
Выражение-генератор?
Как-то путано выходит слишком, по моему.
0
Именно выражение-генератор. И ничего путанного. Генератор списка создает список, генератор словаря создает словарь.
А выражение-генератор — оно не сразу создает весь список в памяти, а работает именно как генератор.
Вы поищите по хабру статьи про питон и генераторы, везде используются именно эти термины. Не понимаю, почему такие споры только сейчас возникли
А выражение-генератор — оно не сразу создает весь список в памяти, а работает именно как генератор.
Вы поищите по хабру статьи про питон и генераторы, везде используются именно эти термины. Не понимаю, почему такие споры только сейчас возникли
0
Генератор списка не возвращает генератор, как и генератор словаря, зато выражение-генератор возвращает генератор.
Нет, это путано.
Ещё раз обращаю внимание на отсутствие слова генератор в оригинальном термине.
И как мне кажется, «списковое выражение» вполне нейтрально и подходит для первода/описания термина гораздо лучше, чем то, что предложили вы.
Нет, это путано.
Ещё раз обращаю внимание на отсутствие слова генератор в оригинальном термине.
И как мне кажется, «списковое выражение» вполне нейтрально и подходит для первода/описания термина гораздо лучше, чем то, что предложили вы.
0
А я еще раз повторяю, это не я предложил, это принятые русскоязычные термины в Python.
Вот еще одна ссылка в подтверждение, я уже их достаточно привел.
Вот еще одна ссылка в подтверждение, я уже их достаточно привел.
0
Новичкам было бы еще полезно написать, для какой версии Python данные примеры. В Python 3.4
xrange
нет.0
Много чего можно также слелать и через многими ненавистную reduce, например, удаление дубликатов:
items = [1,2,3,6,2,1,2,3,4,1,2,3,4]
unique = reduce(lambda stack, item: stack + [item] if not (item in stack) else stack, items, []))
0
Вот еще, как можно сделать, но работает более медленно
#[i for i in range(1, 11) if i % 2 == 0]
list(filter((lambda x: x % 2 == 0), range(1, 11)))
-1
UFO just landed and posted this here
Послушайте, ну писать туториал до того как вы прочитали docstring с метода это же нехорошо:
[i for i in range(1, 11) if i % 2 == 0] == range(2, 12, 2)
range():
range(stop) -> list of integers
range(start, stop[, step]) -> list of integers
Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
[i for i in range(1, 11) if i % 2 == 0] == range(2, 12, 2)
0
Генератор и впрямь плохое название, в Питоне 3 генераторы — это совершенно другой зверь. Жаль, что никак не найдется нормальный термин для comprehension
0
Ну раз уж зашла речь о comprehensions, то надо вспомнить и родоначальника — set comprehension
oddlist = [ x%10 for x in range(100) if x%2 ] # 1 3 5 7 9 1 3 5 7 9 ...
emptylist = []
oddcubes = { x : x**3 for x in range(100) if x%2 }
emptydict = {}
odds = { x%10 for x in range(100) if x%2 } # 1 3 5 7 9 - дубликаты будут выкинуты
emptyset = set() # внезапно! {} это пустой словарь, а не пустое множество
0
Sign up to leave a comment.
Генераторы словарей