【问题标题】:python list concatenation with add function used使用添加函数的python列表连接
【发布时间】:2019-04-23 02:22:30
【问题描述】:

当我尝试在列表连接情况下使用“+”时,我刚刚意识到一个问题。

例如我可以这样做:

print([[1] + [5]* n for n in range(1, 4)])
>>> [[1, 5], [1, 5, 5], [1, 5, 5, 5]]

但是如果我切换add函数的顺序:

print([[5] * n for n in range(1, 4) + [1]])

我不会得到:

>>> [[5, 1], [5, 5, 1], [5, 5, 5, 1]]

相反,我得到了: TypeError: unsupported operand type(s) for +: 'range' and 'list'

有没有办法让它工作?

【问题讨论】:

    标签: python concatenation


    【解决方案1】:

    你正在做这个操作:

    range(1, 4) + [1]
    

    在这种情况下没有任何意义。

    您必须在 [5] * n 之后立即执行 + [1],如下所示:

    print([[5]*n+[1] for n in range(1, 4)])
    

    【讨论】:

      【解决方案2】:

      您必须将其添加到您正在操作的列表中,而不是您正在迭代的范围中。此外,如果您先进行加法,然后再进行乘法运算(这里我们先进行乘法运算,然后再进行加法运算),则必须将第一条语句括起来,因为 Python 根据 operator precedence 对操作进行排序:

      print([[5] * n + [1] for n in range(1, 4)])
      

      【讨论】:

      • @Code_Control_jxie0755 乐于助人,10分钟后别忘了接受:-)
      【解决方案3】:

      这将起到作用,因为贡献者已经回答了

      [[5] * n + [1] for n in range(1, 4)]
      
      

      但是在您的解决方案类型中 range(1, 4) 将是 ,如果您想对其进行一些列表操作,例如连接,那么您应该这样做:

      list(range(1, 4)) + [1]
      
      

      【讨论】:

      • 谢谢,我认为list(range(1, 4)) 与此无关。
      • 同意,只是指出如果您想对范围进行任何操作,那么我们需要先将其转换为列表。
      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2020-04-21
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多