处理列表中的列表

2 投票
4 回答
807 浏览
提问于 2025-04-16 19:59

我有一个列表,其中包含多个列表,比如:

    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)

撰写回答