处理列表中的列表
我有一个列表,其中包含多个列表,比如:
arr = [[1, 2], [1, 3], [1, 4]]
我想在每个内部列表的末尾加上100。对于上面的例子,输出结果应该是:
arr = [[1, 2, 100], [1, 3, 100], [1, 4, 100]]
当然,我可以这样做:
for elem in arr:
elem.append(100)
但是有没有更符合Python风格的方法呢?为什么下面这个方法不行:
arr = [elem.append(100) for elem in arr]
4 个回答
1
你可以这样做:
[a + [100] for a in arr]
你发现 append
不起作用的原因是因为 append
不会返回列表,而是返回 None
。
当然,这样做比直接使用 append
更消耗资源,因为你会把所有东西都复制一遍。
5
第二种写法应该像这样:arr = [elem + [100] for elem in arr]
。不过如果你问我,最符合Python风格的写法是第一种。for
这种写法有它自己的用处,在这里用起来非常合适。
3
注意,你的代码也是可以正常工作的——你需要知道的唯一一点是,在这种情况下不需要把结果赋值给一个变量:
arr = [[1, 2], [1, 3], [1, 4]]
[x.append(100) for x in arr]
执行后,arr会包含更新后的列表[[1, 2, 100], [1, 3, 100], [1, 4, 100]],也就是说,它就像是直接在原地更新了一样,但这样做并不是很常见。
你在下面的例子中也能得到相同的结果:
map(lambda x: x.append(100), arr)
正如之前讨论的,你可以使用列表推导式或map来做到这一点,并把结果赋值给任何变量:
res = map(lambda x: x + [100], arr)