当在 for 循环内更改现有列表的每个元素时,如何将列表附加到 python for 循环中的另一个列表?
How to append a list to another list in a python for loop when each element of the existing list is being changed inside the for loop?
我正在尝试编写一个代码,每次都会在 for 循环中创建修改后的列表,并将其附加到新列表中。为此,我尝试创建一个空的 numpy 数组,其中包含两个元素,这两个元素将在遍历字典元素的 for 循环中进行修改。
r2 = []
r1 = np.empty(2, dtype = object)
r1 = r1.tolist()
r_1 = {'G':32,'H':3}
for i in r_1:
r1[0] = i
r1[1] = i + 'I'
print(r1)
r2.append(r1)
print(r2)
这给了我 r2
作为
[['H', 'HI'], ['H', 'HI']]
每次迭代中的 r1
值都符合预期。但是,我希望 r2
成为
[['G', 'GI'], ['H', 'HI']]
我不知道为什么 append()
不能正常工作。我也通过 extend()
尝试了同样的事情,但同样的事情发生在 extend([r1])
而在 extend(r1)
上它给了我
['G', 'GI','H', 'HI']
是我做错了还是代码在解释别的东西?
我认为问题在于您将 r1 的指针传递给了 r2。 r1 在 for 循环范围外创建,但在 for 循环内更改。因此,r2 看到的是 r1 在其最后状态的 2 个实例,即 ['H'、'HI'].
尝试像 r2.append([i, i + 'I'])
一样将子数组直接传递给 r2
如果你需要r2中的numpy数组,你可以r2.append(np.array([i, i + 'I']))
当您将 r1
两次附加到 r2
时,它实际上使 r2
成为 [r1, r1]
的列表,而不是附加时 r1
的内容,因此,当 r1
在第二次附加之前更改时, r2
中引用 r1
的第一个元素也会更改。
一种解决方案是完全不使用 r1 并直接附加内容:
r2 = []
r_1 = {'G':32,'H':3}
for i in r_1:
r2.append([i, i+"I"])
print(r2)
第二种解决方案是附加 r1 的副本以避免两个元素具有相同的引用:
r2 = []
r_1 = {'G':32,'H':3}
r1 = [None, None]
for i in r_1:
r1[0] = i
r1[1] = i + "I"
r2.append(r1.copy())
print(r2)
我正在尝试编写一个代码,每次都会在 for 循环中创建修改后的列表,并将其附加到新列表中。为此,我尝试创建一个空的 numpy 数组,其中包含两个元素,这两个元素将在遍历字典元素的 for 循环中进行修改。
r2 = []
r1 = np.empty(2, dtype = object)
r1 = r1.tolist()
r_1 = {'G':32,'H':3}
for i in r_1:
r1[0] = i
r1[1] = i + 'I'
print(r1)
r2.append(r1)
print(r2)
这给了我 r2
作为
[['H', 'HI'], ['H', 'HI']]
每次迭代中的 r1
值都符合预期。但是,我希望 r2
成为
[['G', 'GI'], ['H', 'HI']]
我不知道为什么 append()
不能正常工作。我也通过 extend()
尝试了同样的事情,但同样的事情发生在 extend([r1])
而在 extend(r1)
上它给了我
['G', 'GI','H', 'HI']
是我做错了还是代码在解释别的东西?
我认为问题在于您将 r1 的指针传递给了 r2。 r1 在 for 循环范围外创建,但在 for 循环内更改。因此,r2 看到的是 r1 在其最后状态的 2 个实例,即 ['H'、'HI'].
尝试像 r2.append([i, i + 'I'])
如果你需要r2中的numpy数组,你可以r2.append(np.array([i, i + 'I']))
当您将 r1
两次附加到 r2
时,它实际上使 r2
成为 [r1, r1]
的列表,而不是附加时 r1
的内容,因此,当 r1
在第二次附加之前更改时, r2
中引用 r1
的第一个元素也会更改。
一种解决方案是完全不使用 r1 并直接附加内容:
r2 = []
r_1 = {'G':32,'H':3}
for i in r_1:
r2.append([i, i+"I"])
print(r2)
第二种解决方案是附加 r1 的副本以避免两个元素具有相同的引用:
r2 = []
r_1 = {'G':32,'H':3}
r1 = [None, None]
for i in r_1:
r1[0] = i
r1[1] = i + "I"
r2.append(r1.copy())
print(r2)