Дублирование элемента в списке

Может кто-нибудь "на пальцах" объяснить, какое назначение отведено 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 шт):

Автор решения: wchistow

Конструкция

[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.

→ Ссылка
Автор решения: Max Rokitsky

Такая запись:

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)
→ Ссылка
Автор решения: Fox Fox

Улыбаюсь... Я понимаю, что это не ответ, но всё же, для справки...

n = sorted([1, 2, 3] * 2)
print(n) # результат: [1, 1, 2, 2, 3, 3]
→ Ссылка