【问题标题】:Appending a list to a list of lists将列表附加到列表列表
【发布时间】:2021-01-01 19:28:08
【问题描述】:

在下面的代码中,我试图将一个名为 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)' 吗?
  • [8]+[5,4] 产生[8,5,4],所以你可以做到b[2] += a

标签: python list append element


【解决方案1】:

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

b[2].extend(a)

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

一旦你有你想要的列表,例如

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

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

b = sum(b, [])

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

最后,您可以按照您的意图对扁平化列表求和:

sum(b)

【讨论】:

    【解决方案2】:

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

    只需要一行代码:

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

    【讨论】:

      【解决方案3】:

      如果我理解正确,您需要一个完整的整数列表 - 而不是整数列表的列表-。
      无论如何,我会尝试为他们两个提供解决方案。

      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]]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2013-01-28
        • 2014-02-14
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多