繁体   English   中英

嵌套列表和列表理解

[英]Nested Lists and List Comprehensions

我对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? 我尝试了很多,但没有成功。

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 我的第一个编辑中的解决方案允许在子列表上实现任何类型的操作,但如果操作是基本操作并且仅依赖于子列表的索引,则Dan的解决方案将执行得更快。

HTH!

你的意思是这样的:

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM