为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Python 的 for 循环中更改变量?

如何在 Python 的 for 循环中更改变量?

芜湖不芜 2022-10-06 18:53:26
我的代码:for x in remove_zeros:    if x == remove_zeros[-1]:        x = '0' + x    else:        x = '1' + x由于某种原因,这对变量没有任何作用。我已经查找了如何解决此问题,但根本没有任何效果。基本上,我正在检测列表中的元素是否是最后一个元素,如果是,我要么在其前面添加 0 或 1。我无法弄清楚如何使这项工作。
查看完整描述

5 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

当您编写 时x = '0' + x,您只需覆盖名称x指向的值。每次执行新的循环时,您都不会直接修改列表中x最初指向的值。for x in remove_zeros:


您可以通过直接使用其索引访问它并为其分配一个新值来修改列表中的值。一个简单的方法是使用enumerate,它同时循环列表索引和值:


 for index, x in enumerate(remove_zeros):

            if x == remove_zeros[-1]:

                remove_zeros[index] = '0' + x

            else:

                remove_zeros[index] = '1' + x


查看完整回答
反对 回复 2022-10-06
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

在 for 循环中,控制变量 (x) 是在每次迭代时重新分配的临时变量。对于字符串,它不是对列表元素的引用,而是单独的副本。这意味着在循环内更改 x 不会对列表产生影响。

鉴于您正在修改列表中的每个元素,您可以在不求助于索引的情况下执行此操作(这不是非常 Pythonic)。尝试使用列表推导生成一个新列表:

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


查看完整回答
反对 回复 2022-10-06
?
倚天杖

TA贡献1828条经验 获得超3个赞

使用索引号而不是临时变量x来修改列表的值:

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



查看完整回答
反对 回复 2022-10-06
?
MYYA

TA贡献1868条经验 获得超4个赞

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']……您将在列表0中添加两个3s。


查看完整回答
反对 回复 2022-10-06
?
动漫人物

TA贡献1815条经验 获得超10个赞

这是因为您正在处理循环变量 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]



查看完整回答
反对 回复 2022-10-06
  • 5 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信