Дублирование элемента в списке
Может кто-нибудь "на пальцах" объяснить, какое назначение отведено for _ in
в следующем коде:
n = [1, 2, 3]
new_lst = [i for i in n for _ in range(2)]
print(new_lst)
По условию задачи нужно создать копию каждого элемента в списке, получив следующий результат:
[1, 1, 2, 2, 3, 3]
Очевидно, что i for i
создает копию элемента списка, но чему в дальнейшем присваивается эта самая копия ? Отступу от основного i
?
Ответы (3 шт):
Конструкция
[i for i in n for _ in range(2)]
Это то же самое, что и
new_lst = []
for i in n:
for _ in range(2):
new_lst.append(i)
Это называется list comprehension.
Такая запись:
lst = [1, 2, 3]
new_lst = [i*2 for i in lst]
print(new_lst) # [2, 4, 6]
называется "list comprehension". Позволяет короткой записью сделать список из другого итерируемого объекта (в данном случае списка).
Она равноценна записи:
new_lst = []
for i in lst:
new_lst.append(i*2)
print(new_lst) # [2, 4, 6]
Как и с обычными циклами, можно вызывать цикл в цикле. Например:
lst = [[1, 2], [3, 4], [5, 6]]
new_lst = []
for i in lst:
for y in i:
new_lst.append(y*2)
print(new_lst) # [2, 4, 6, 8, 10, 12]
Тоже самое можно записать:
new_lst = [y for i in lst for y in i]
print(new_lst) # [2, 4, 6, 8, 10, 12]
По поводу нижнего подчёркивания а записи for _ in
:
Нижним подчёркиванием принято называть переменные, которыми мы не будем пользоваться, но по каким-то причинам мы вынуждены куда-то записать значение.
В итоге получается что запись:
n = [1, 2, 3]
new_lst = [i for i in n for _ in range(2)]
то же самое, что и следующий код:
new_lst = []
for i in n:
for _ in range(2):
new_lst.append(i)
Улыбаюсь... Я понимаю, что это не ответ, но всё же, для справки...
n = sorted([1, 2, 3] * 2)
print(n) # результат: [1, 1, 2, 2, 3, 3]