Вложенные списки и списки - PullRequest
1 голос
/ 06 декабря 2011

Я довольно новичок в 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 ]

2 голосов
/ 06 декабря 2011

Более общая версия mac's :

>>> 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]]
1 голос
/ 06 декабря 2011

Вы ищете это?

>>> 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]]

EDIT2: Решение в моем первом редактировании позволяет реализовать любые типы манипуляций над подсписками, но если операция является базовой и зависит только от индекса подсписка, Решение Дана будет работать быстрее.

НТН!

0 голосов
/ 06 декабря 2011

вы имеете в виду что-то вроде этого:

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

...