【问题标题】:Nested loops do not print correct row number python嵌套循环不打印正确的行号python
【发布时间】:2021-03-02 07:40:41
【问题描述】:

这是我第一次在 Stack Overflow 上发帖。这是我的问题:

我正在尝试使用列表列表在 python 中创建一个数组。我正在尝试添加行,但在此之前它只显示最后一行的值。

这是我的代码:

my_list = [1] *4

blank_lst = []
for row in range (0, len(my_list)):
    blank_lst.append(my_list)


for row in range(0,len(blank_lst)):
    for col in range(0,len(blank_lst[0])):
        blank_lst[row][col] = str(row) + str(col)



print(blank_lst) 

输出: [['30', '31', '32', '33'], ['30', '31', '32', '33'], ['30', '31', '32', '33'], ['30', '31', '32', '33']]

[0.1s完成]

P.S:我正在使用 Sublime Text 编辑器

【问题讨论】:

  • 结果应该是什么?
  • [['00', '01', '02', '03'], ['10', '11', '12', '13'], ['20', '21', '22', '23'], ['30', '31', '32', '33']]

标签: python-3.x


【解决方案1】:

好吧,我为你添加了一些打印代码:

my_list = [1] *4

blank_lst = []
for row in range (0, len(my_list)):
    blank_lst.append(my_list)

for lst in blank_lst:
    print(id(lst))
    for cell in lst:
        print(id(cell))

for row in range(0, len(blank_lst)):
    for col in range(0, len(blank_lst[0])):
        blank_lst[row][col] = str(row) + str(col)
        print(row, col, blank_lst)

print(blank_lst) 

首先,您可能会发现附加到 blank_lst 的 4 个列表的所有 4 个打印 ID 都是相同的。这意味着如果您修改其中一个,您将修改所有这些。这四个列表实际上都映射到内存的同一部分,它们是同一个列表。这就是为什么你发现最终的结果不是你想要的。

此外,如果您检查blank_lst的子列表中每个元素的id,它们也是相同的。

Python: fastest way to create a list of n lists

这可能有助于您更好地理解这种现象。

【讨论】:

    【解决方案2】:

    这应该会给你想要的结果。

    blank_lst =[]
    for row in range(0,4):
        blank_lst.append([str(x).zfill(2) for x in range(row*10, row*10+4)])
    print(blank_lst)
    

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2019-02-27
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多