О генераторах и включениях в python

у новичков всегда да и у нормальных полноценных программистов бывало(и у меня тоже), что пишешь генереаторы для списков или словарей, на чистых циклах, как например for или while, но он выдавал вот такое!

Аннотация 2020-07-31 105503

а потом недоумеваешь, почему не от 1 до 10, а так, но это не проблема!
для этого и были созданы включения!
рассморим пример:

a = [number for number in range(1, 10) ]
print(a)

[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

здесь схема выглядит следующим образом:
переменная = [выражение for элемент in итерабельном обьекте]
если вы недоумеваете в чем тут дело, то поясню, здесь идет как-бы присваивание как в циклах( for number in range(1, n): ).

вот совершенно идентичные по выводу программы:

number_list = list(range(1, 10)) # првращение диапазона чисел в лист или список
print(number_list)
number_list = [number for number in range(1, 10)] # влючение
print(number_list)
number_list =[]
for number in range(1, 10):
    number_range.append(number) #просто цикл for
print(number_list)

включения нужны для облегчения и быстродействия кода.

ДОПОЛНИЕЛЬНО!
*включения словарей:
{ выражение_ключа: выражение_значения for выражение in итерабельный объект }

*включения множества
{ выражение for выражение in итерабельный объект}

это сообщение было создано для повторения или, чтоб узнать новое из программирования!

1 лайк

Потому что вывод надо было за цикл вынести :slight_smile:

b не используется, выведется пустое а.
А если бы выводился b, то непонятно откуда вложенный список взялся

будет просто список с числами

$ python3
Python 3.8.2 (default, Jul 16 2020, 14:00:26) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> [number for number in range(1, 10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

это эквивалентно

b = []
for i in range(1, 10):
    b.append(i)
print(b)

ниже в примере это ж и показано :thinking:

Хм-м, спасибо за поправку😜