python - 为什么追加覆盖列表?
问题描述
我正在尝试来自hackerrank的一些问题并遇到了这个问题 https://www.hackerrank.com/challenges/list-comprehensions/problem
我试过这个解决方案
if __name__ == '__main__':
x = int(input())
y = int(input())
z = int(input())
n = int(input())
L = []
SL = []
for i in range(0, x + 1):
for j in range(0, y + 1):
for k in range(0, z + 1):
if i + j + k != n:
SL[:] = []
SL.append(i)
SL.append(j)
SL.append(k)
print(SL)
L.append(SL)
print(L)
尽管 SL 有正确的解决方案,但由于某种原因,我无法将 SL 附加到主列表 L 中,并且显然 L.append(SL) 每次执行时都会覆盖列表 L,因为它会打印 SL 的最后一个值。为什么会这样?我尝试使用扩展,但不是将其设为列表列表,而是将其创建为整数列表。编辑:谢谢大家的解释!
解决方案
实际上,您的代码不起作用,这是由于该行SL[:] = []
:它更改了引用的列表的内容SL
。通过这样做,您更改了 的所有元素,因为您总是在循环中附加toL
引用的列表。替换为将解决问题,因为在这种情况下,您会创建一个新列表而不会覆盖前一个列表。
它可以通过以下建议进行修复,并且更具可读性和更易于调试(如果需要):SL
L
SL = []
L = []
for i in range(0, x + 1):
for j in range(0, y + 1):
for k in range(0, z + 1):
if i + j != n and i + k != n and k + j != n and i + j + k != n:
L.append([i, j, k])
print(L)
x=1, y=2, z=3, n=4:它给了我以下输出:
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 0, 3], [0, 1, 0], [0, 1, 1], [0, 1, 2], [0, 2, 0],
[0, 2, 1], [0, 2, 3], [1, 0, 0], [1, 0, 1], [1, 0, 2], [1, 1, 0], [1, 1, 1], [1, 2, 0]]
推荐阅读
- android - 加载多个位图
- .net - WerFault 系统错误 Visual Studio
- jquery - jQuery $(this) 而不是多个 id
- r - 如何正确更改 R 中 rcpp 中的 ListMatrix 列表
- json - 发送 JSON 内容类型的 POST 请求并在 VB.NET 中显示 JSON 响应
- c# - 从 Core 2 迁移到 Core 2.1 时将 DbContext 作为 DI
- ruby-on-rails - ActiveRecord::StatementInvalid: PG::UndefinedTable: 错误: 与 HABTM 关联与导轨的关系
- c - c中的字符矩阵(动态分配的二维数组)
- laravel - 在 Laravel 5.6 中一次插入父母和孩子
- c# - ASP .NET 4.7 MVC 身份验证和授权标识