Списочное выражение – запись, которая строит новый список из элементов другого набора:
[выражение for x in последовательность]. Читается «собрать выражение для каждогоxиз последовательности».
squares = []
for x in range(5):
squares.append(x * x)
Эти три строки и [x * x for x in range(5)] дают один и тот же список [0, 1, 4, 9, 16]. Переменная x живёт только внутри выражения – наружу она не выходит.
Отсюда короткое чтение чисел, о котором шла речь в уроке 9.1: nums = [int(s) for s in input().split()] сразу даёт список чисел, без промежуточного parts.
print([x * x for x in range(5)]) # [0, 1, 4, 9, 16]
nums = [int(s) for s in input().split()] # 4 8 15
print(nums) # [4, 8, 15]
words = ['кот', 'дом', 'лес']
print([len(w) for w in words]) # [3, 3, 3]
print([w.upper() for w in words]) # ['КОТ', 'ДОМ', 'ЛЕС']