python列表串联使用添加功能

时间:2019-04-23 02:22:30

标签: python concatenation

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

例如,我可以做到:

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

但是,如果我切换添加功能的顺序:

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'

反正有办法使它起作用吗?

3 个答案:

答案 0 :(得分:4)

您正在执行此操作:

range(1, 4) + [1]

在这种情况下什么都不是。

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

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

答案 1 :(得分:1)

您必须将其添加到要处理的列表中,而不是要遍历的范围中。另外,如果您先进行加法,然后进行乘法(这里我们先进行乘法,再进行加法),则由于Python根据operator precedence对操作进行排序,因此您必须包围第一条语句:

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

答案 2 :(得分:0)

这将解决问题,因为贡献者已经回答了

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

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

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