将列表附加到列表列表

Appending a list to a list of lists

在下面的代码中,我试图将一个名为 a 的列表附加到列表 b 的列表中。

a = [5,4]
b = [[4],[3],[8]]
b[2].append(a)

Python 输出

[[4], [3], [8, [5, 4]]] 

但是,我希望元素作为整数而不是列表附加,所以 b 应该是 [[4], [3], [8, 5, 4]] 然后我想合并列表所以b 将是 [4, 3, 8, 5, 4]。我希望能够做到这一点,这样我就可以使用 sum 函数求出 b 的元素之和。有人对如何做到这一点有建议吗?

首先,您试图扩展 一个列表,而不是附加到它。具体来说,你想做

b[2].extend(a)

append() 将单个元素添加到列表中。 extend() 向列表中添加多个元素。 extend() 接受任何可迭代对象,而不仅仅是列表。但最常见的是传递一个列表。

获得所需的列表后,例如

[[4], [3], [8, 5, 4]] 

然后您需要连接这些列表以获得一个简单的整数列表。您可以为此使用 sum()——添加列表与添加整数没有什么不同。

b = sum(b, [])

这里的技巧是您必须将初始(空)值传递给 sum(),否则它会尝试将列表添加到 b 中,就好像它们是数字一样。

最后,您可以按预期对扁平化列表求和:

sum(b)

我的建议是使用 itertools 内置包中的 chain 函数以更简洁和 pythonic 的方式实现您的目标。

只需要一行代码:

sum(chain(a, tuple(chain.from_iterable(b))))

如果我没理解错的话,你想要一个充满整数的列表——而不是一个包含整数列表的列表——。
无论如何,我会尝试为他们两个提供解决方案。

for i in range(len(a)):
    b[-1].append(a[i])

输出:b = [[4], [3], [8, 5, 4]]

或者可能只是一个列表中的每个数字:

for i in range(len(a)):
    b.append([a[i]])

输出:b = [[4], [3], [8], [5], [4]]