我正在學習串列和串列分配,并在串列中使用 while 和 for 回圈。我寫了下面的代碼只是為了測驗我的理解。
I=[1,4, 7, 6, 7,8,9]
IU=I
while IU !=[]:
print ('I: ',I)
print('IU :' ,IU)
for i in I:
print(i)
if i*i<=36:
IU.remove(i)
print(IU)
if i>=9:
break
這給出了以下輸出:
I: [1, 4, 7, 6, 7, 8, 9]
IU : [1, 4, 7, 6, 7, 8, 9]
1
[4, 7, 6, 7, 8, 9]
7
6
[4, 7, 7, 8, 9]
8
9
我的理解是它會4在1從IU. 但是它沒有列印4。關于為什么會發生這種情況的任何提示?
uj5u.com熱心網友回復:
問題
發出的行是IU=I
此行不會創建新串列IU。Python 創建對原始串列的參考“IU” I,這意味著IU并I指向同一個串列。因此,當您4從中洗掉時I,IU也會受到影響。
解決方案
有不同的復制方式I。例如,您可以
IU = [_ for _ in I]
或者
IU = I.copy()
或者
IU = I[:]
演示
這是一個演示顯示差異
L = [1,2]
Ref = L
Cpy = L.copy()
L.append(3)
print(Ref)
print(Cpy)
輸出
[1, 2, 3] [1, 2]
uj5u.com熱心網友回復:
您看不到 4 列印,因為當程式最初洗掉 1 時,回圈指標 i 指向 1,因此,一旦洗掉 1,i 指標移動到下一個元素 4。并且在回圈結束時,因為 for 回圈轉到下一個元素(我們在 c 中執行的 i ),它在下一次迭代開始時指向 7。希望我能解決你的疑惑。
uj5u.com熱心網友回復:
python中的List是使用動態陣列實作的
在這里,從串列中洗掉 1 后,左邊的串列向后移動(不完全但有點相似),所以i現在指向 4。
現在i增加,因此現在i指向下一個記憶體位置。
請檢查鏈接以查看串列如何在 python 中實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518396.html
標籤:Python列表
上一篇:如何在保持順序的同時根據其中一個串列中的重復專案從2個串列中洗掉專案?
下一篇:在串列串列中查找重復項
