【问题标题】:How to do Math Functions on Lists within a List如何对列表中的列表执行数学函数
【发布时间】:2018-06-25 16:13:20
【问题描述】:

我对 python 非常陌生(使用 python3),我正在尝试将数字从一个列表添加到另一个列表。唯一的问题是第二个列表是列表列表。例如:

[[1, 2, 3], [4, 5, 6]]

我想要的是,比如说,为第一个列表中的每个项目添加 1,为第二个列表中的每个项目添加 2,返回如下内容:

[[2, 3, 4], [6, 7, 8]]

我试过了:

original_lst = [[1, 2, 3], [4, 5, 6]]
trasposition_lst = [1, 2]
new_lst = [x+y for x,y in zip(original_lst, transposition_ls)]
print(new_lst)

当我这样做时,我得到一个错误

只能将列表(不是“int”)连接到列表

这让我相信只要列表嵌套在另一个列表中,我就不能以这种方式对列表进行操作。我想在不展平嵌套列表的情况下执行此操作。有解决办法吗?

【问题讨论】:

  • 你可以考虑换个标题。
  • @user32185 我应该把它改成什么?

标签: python python-3.x list math nested-lists


【解决方案1】:

一种使用enumerate的方法

演示:

l = [[1, 2, 3], [4, 5, 6]]
print(  [[j+i for j in v] for i,v in enumerate(l, 1)] )

输出:

[[2, 3, 4], [6, 7, 8]]

【讨论】:

    【解决方案2】:

    你可以使用enumerate:

    l = [[1, 2, 3], [4, 5, 6]]
    new_l = [[c+i for c in a] for i, a in enumerate(l, 1)]
    

    输出:

    [[2, 3, 4], [6, 7, 8]]
    

    【讨论】:

      【解决方案3】:

      为什么不改用 numpy?

      import numpy as np
      mat = np.array([[1, 2, 3], [4, 5, 6]])
      mul = np.array([1,2])
      m = np.ones(mat.shape)
      res = (m.T *mul).T + mat
      

      【讨论】:

      • 很好的答案,尽管对于这种特殊情况似乎需要付出很多额外的努力而没有额外的好处。
      • 如果您只需要为这种情况工作,当然numpy 是一种矫枉过正。当您使用更大的数组时,它会变得很方便。无论如何,我发布了另一个答案,该答案概括了不同长度列表的解决方案。
      【解决方案4】:

      您与原始方法非常接近。只是差了一步。

      小加法

      original_lst = [[1, 2, 3], [4, 5, 6]]
      transposition_lst = [1, 2]
      new_lst = [[xx + y for xx in x] for x, y in zip(original_lst, transposition_lst)]
      print(new_lst)
      

      输出

      [[2, 3, 4], [6, 7, 8]]
      

      推理

      如果您打印原始 zip,则很容易发现问题。你原来的 zip 产生了这个:

      在:

      original_lst = [[1, 2, 3], [4, 5, 6]]
      transposition_lst = [1, 2]
      for x,y in zip(original_lst, transposition_lst):
          print(x, y)
      

      输出

      [1, 2, 3] 1
      [4, 5, 6] 2
      

      现在很容易看出您正在尝试将整数添加到列表中(因此出现错误)。哪个python不明白。如果它们都是整数,它将添加它们,或者如果它们都是列表,它将组合它们。

      要解决此问题,您需要对代码执行一个额外步骤,将整数添加到列表中的每个值。因此在上面的解决方案中添加了额外的列表理解。

      【讨论】:

        【解决方案5】:

        numpy 不同的方法是,即使对于不同长度的列表也可以使用

        lst = [[1, 2, 3], [4, 5, 6, 7]]
        c = [1, 2]
        res = [[l + c[i] for l in lst[i]] for i in range(len(c))]
        

        【讨论】:

          猜你喜欢
          • 2023-01-10
          • 2021-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-29
          • 1970-01-01
          相关资源
          最近更新 更多