我对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?我已经尝试了很多但没有成功。
答案 0 :(得分:2)
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 :(得分:1)
你在找这个吗?
>>> 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:我的第一个编辑中的解决方案允许在子列表上实现任何类型的操作,但如果操作是基本操作且仅依赖于子列表的索引,Dan's solution会表现得更快。
HTH!
答案 2 :(得分:0)
你的意思是这样的:
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]
。