当我尝试在列表串联情况下使用“ +”时,我才意识到一个问题。
例如,我可以做到:
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'
反正有办法使它起作用吗?
答案 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]