我簡化了我的代碼,以獲得我所需要的錯誤。
one = ['x'/span>]
two = ['y']
final_data = []
for r in range(1, 3)。
print(final_data, r)
if r == 2:
one[0] = two[0]
print(one)
final_data.append(one)
print(final_data)
print(final_data)
第2個回圈中的最終資料沒有被修改,但最終結果是[['y'], ['y']],盡管
我希望它變成[['x'], ['y']]
uj5u.com熱心網友回復:
在這一行one[0] = two[0]中,你改變了串列one中的值,最后當你列印final_data時,你得到[['y'], ['y']]因為在串列one中你有'y'。
你需要為每個迭代創建一個copy的one。要復制一個串列,你可以使用[:]。然后在你對one做了你想做的事情之后,將old_one復制到one。
...
old_one = one[:]
...
one = old_one[:]
試一下:
one = ['x'/span>]
two = ['y']
final_data = []
for r in range(1, 3)。
print(final_data, r)
old_one = one[:]
if r == 2:
one[0] = two[0]
print(one)
final_data.append(one)
one = old_one[:]
print(final_data)
print(final_data)
uj5u.com熱心網友回復:
簡而言之:
final_data.append( one )
不是添加串列one的內容,而是添加名為one的串列的參考到final_data。
在C/C 術語中,一個指向串列one的 "指標"(或 "參考")被添加,這樣到r==2時:
final_data = [ < reference to `one`>, <reference to `one`> ]
因此,通過修改one[0]為one[0] = two[0],one的內容被改變,因此final_data也會看到這些變化。
可能更簡單的解決方案是:
import copy
...
final_data.append( copy.deepcopy(one) )
copy.deepcopy()生成--正如名字所暗示的--物件的完整拷貝,這樣,現在一個對新的list的參考將被添加到final_data中,而不是對名為one的串列的(又一個)參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308561.html
標籤:
上一篇:將Python串列寫成csv
