Вложенные списки и списки
Я довольно новичок в Python, и мне трудно понять, как применить понимание списка к части вложенного списка (в частности, на уровне индекса).
Например, если у меня есть следующее:
my_list = [[1,2], [3,7], [6,9], [4,3]]
new_list = [[i*2 for i in sublist] for sublist in my_list]
Как бы я изменил свое понимание списка, чтобы применить операцию только к индексу 1 каждого подсписка? Я немного экспериментировал, но безуспешно.
3 ответа
Более общая версия Mac:
>>> my_list = [[1,2], [3,7], [6,9], [4,3]]
>>> new_list = [[v*2 if i==0 else v for i,v in enumerate(sublist)] for sublist in my_list]
>>> new_list
[[2, 2], [6, 7], [12, 9], [8, 3]]
Вы ищете это?
>>> my_list = [[1,2], [3,7], [6,9], [4,3]]
>>> [[sublist[0] * 2, sublist[1]] for sublist in my_list]
[[2, 2], [6, 7], [12, 9], [8, 3]]
РЕДАКТИРОВАТЬ: вышеупомянутое решение не будет хорошо масштабироваться, если у вас есть списки многих элементов. Если это так, то альтернативой может быть использование отображения:
>>> my_list = [[1,2], [3,7], [6,9], [4,3]]
>>> def double_first(list_):
... list_[0] *= 2
... return list_
...
>>> map(double_first, my_list)
[[2, 2], [6, 7], [12, 9], [8, 3]]
РЕДАКТИРОВАТЬ 2: Решение в моем первом редактировании позволяет реализовать любые манипуляции с подсписками, но если операция является базовой и зависит только от индекса подсписка, решение Дана будет работать быстрее.
НТН!
Вы имеете в виду что-то вроде этого:
my_list = [[1,2], [3,7], [6,9], [4,3]]
new_list = [sublist[0]*2 for sublist in my_list]
Output:
new_list == [2, 6, 12, 8]
Кроме того, вы забыли поставить запятые между своими подсписками (Исправлено в моем ответе)
Я предполагаю, что под "индексом 1" вы подразумеваете первый элемент.
Если вы на самом деле имеете в виду второй элемент (индекс 1), вы будете использовать sublist[1]
вместо sublist[0]
,