【问题标题】:Add item into each subarray python将项目添加到每个子数组python
【发布时间】:2020-12-13 13:13:05
【问题描述】:

我有一个数组arr_ = [['a', 'b'], ['x', 'y']] 我想在每个子数组的开头放置字符 ! 所以它应该看起来很有趣[['!', 'a', 'b'], ['!', 'x', 'y']] 这是我到目前为止所做的:

def concat(*args):
    return ['!', *args]
arr_ = [['a', 'b'], ['x', 'y']]
n = map(concat, arr_)
print(list(n))

但结果是[['!', ['a', 'b']], ['!', ['x', 'y']]] 我该怎么办?

【问题讨论】:

  • 你可以使用['!', *args]而不是['!'] + args
  • @RobertSeaman 这不是唯一的改变...
  • 是的,我没有在函数参数中看到*args。谢谢@Tomerikoo!

标签: python arrays concatenation


【解决方案1】:

只需删除映射器参数中的*

def concat(args):
    return ['!', *args]
arr_ = [['a', 'b'], ['x', 'y']]
n = map(concat, arr_)
list(n)
>>> [['!', 'a', 'b'], ['!', 'x', 'y']]

您在每次迭代中打包然后解包列表...

当您将* 添加到参数时,您会变成一个包含 1 项的列表。 当您跳过此阶段时,您可以将真正的列表解包并在列表语句return ['!', *args] 中使用 * 解压缩它,这等同于:['!'] + args 在开头添加'!'

【讨论】:

    【解决方案2】:

    如果您执行 def concat(args),这将按预期工作: 发生的情况是,如果您将 *args 作为参数,您传入的每个参数都将放入存储在*args 中的列表中 而你传递的东西就像['a', 'b'] 所以这将被放入一个列表中,所以真正的参数是:[['a', 'b']] 然后在您返回时打开该列表 但它只包含一个元素,即原始列表 所以你得到['!', ['a', 'b']]

    请注意,map 通常被认为是 unpythonic,因为我们也有列表推导: n = [concat(inner) for inner in arr_]

    您可以更进一步,执行以下操作: n = [['!'] + inner for inner in arr_]

    【讨论】:

      【解决方案3】:

      我不知道如何解释代码中的错误。但我找到了另一种方法。

      arr = [['a', 'b'], ['x', 'y']]
      X = []
      for i in arr:
          X.append(['!'] + i)
      print(X)
      

      输出:

      [['!', 'a', 'b'], ['!', 'x', 'y']]
      

      使用列表理解:

      arr = [['a', 'b'], ['x', 'y']]
      X = [['!'] + x for x in arr]
      print(X)
      

      输出:

      [['!', 'a', 'b'], ['!', 'x', 'y']]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-19
        • 2015-07-14
        • 1970-01-01
        • 2021-01-23
        • 1970-01-01
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多