Python 嵌套列表和列表理解

Python 嵌套列表和列表理解,python,list-comprehension,nested-lists,Python,List Comprehension,Nested Lists,我对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应用该操作?我做了很多实验,但都没有成功。你的意思是这样的: my_list = [[1,2], [3,7], [6,9], [

我对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应用该操作?我做了很多实验,但都没有成功。

你的意思是这样的:

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),那么您将使用
子列表[1]
而不是
子列表[0]

您在找这个吗

>>> 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:我的第一次编辑中的解决方案允许对子列表执行任何类型的操作,但是如果操作是基本的并且仅依赖于子列表的索引,则执行速度会更快

更通用的版本:


你的代码中没有条件。请说明您希望为此列表获得何种输出(顺便说一句,其中包含语法错误)。谢谢。发布(并更正)后不久,我意识到自己的语法错误——只是想输入简单的代码,以便理解这个概念。我不敢相信我以前没见过它。很appreciated@donopj22没问题,这是你想要的吗?或者你想要一些不同的东西?是的,所有的答案实际上都很有帮助。我感谢大家的意见。链接自我自己的答案。:)好神啊,人类O.O.也可以使用
itertools.chain
,这样会更有效率。
>>> 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]]