簡體   English   中英

如何在 Python 的 for 循環中更改變量?

[英]How to change variable in a for loop in Python?

我的代碼:

for x in remove_zeros:
    if x == remove_zeros[-1]:
        x = '0' + x
    else:
        x = '1' + x

由於某種原因,這對變量沒有任何作用。 我已經查找了如何解決此問題,但根本沒有任何效果。 基本上,我正在檢測列表中的元素是否是最后一個元素,如果是,我要么在其前面添加 0 或 1。 我無法弄清楚如何使這項工作。

當您編寫x = '0' + x時,您只需覆蓋名稱x指向的值。 for x in remove_zeros:您不會直接修改x最初指向的列表中的值。

您可以通過直接使用其索引訪問它並為其分配一個新值來修改列表中的值。 一個簡單的方法是使用enumerate ,它同時循環列表索引和值:

 for index, x in enumerate(remove_zeros):
            if x == remove_zeros[-1]:
                remove_zeros[index] = '0' + x
            else:
                remove_zeros[index] = '1' + x

在 for 循環中,控制變量 (x) 是在每次迭代時重新分配的臨時變量。 對於字符串,它不是對列表元素的引用,而是單獨的副本。 這意味着在循環內更改 x 不會對列表產生影響。

鑒於您正在修改列表中的每個元素,您可以在不求助於索引的情況下執行此操作(這不是非常 Pythonic)。 嘗試使用列表推導生成一個新列表:

remove_zeros = [ '10'[x==remove_zeros[-1]]+x for x in remove_zeros ]

使用索引號而不是臨時變量x來修改列表的值:

for i in range(len(remove_zeros)):
  remove_zeros[i] = ('0' if remove_zeros[i] == remove_zeros[-1] else '1') + remove_zeros[i]

您在循環的每次迭代過程中都會暫時更改x ,但這些更改不會保存在任何地方。 每次循環重復時, x都會被重新定義為列表中的下一個元素,並且您所做的修改會丟失。

相反,用您想要的值覆蓋現有的列表元素。 一種方法是使用enumerate

 for n,x in enumerate(remove_zeros):
    if x == remove_zeros[-1]:
        remove_zeros[n] = '0'+x
    else:
        remove_zeros[n] = '1'+x

for循環控制變量不是對列表元素的引用,它是元素的副本。 更改它不會更改列表的元素。 您可以將結果存儲在另一個列表中:

result = []
for x in remove_zeros:
    if x == remove_zeros[-1]:
        result.append('0' + x)
    else:
        result.append('1' + x)

或者按照@jfaccioni 的建議去做。 順便說一句,無論哪種方式,您都不是在檢查 x 是否是列表的最后一個元素,而是 x是否等於最后一個元素。 考慮一個列表: ['3','0','1','2','3'] ...您將在列表中的兩個3前添加0

這是因為您正在處理循環變量 x 而不是要更改的實際元素。 remove_zeros 中的元素保持不變。 將您的代碼更改為:

for i in range(len(remove_zeros)):
    remove_zeros[i] = '0' + remove_zeros[i] if remove_zeros[i] == remove_zeros[-1] else '1' + remove_zeros[i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM