对于循环,不会更改正在操作的变量

时间:2014-07-03 14:04:38

标签: python

我正在尝试编写一个程序的一部分,该程序接收先前生成的列表,其中列表中的所有项目都包含字母和数字,并删除所有字母。

这是我写的代码:

test = ["test252k", "test253k"]
numbers = list(str(range(0,10)))

for i in test:
    i = list(i)
    i = [x for x in i if x in numbers]
    i = "".join(str(e) for e in i)
    test = [i for i in test]

但是当我打印测试时,我只是从第1行获得原始列表。

如何确保for循环用新值替换i的原始值?

2 个答案:

答案 0 :(得分:2)

您真正的问题是您不以任何方式更新test。当您执行[i for i in test]列表理解时,使用i会影响外部循环中声明的变量。如果i具有更新的值,则只需将其附加到新列表:

new_list = []
for i in test:
    i = list(i)
    i = [x for x in i if x in numbers]
    i = "".join(str(e) for e in i)
    new_list.append(i)

答案 1 :(得分:0)

    test = ["test252k", "test253k"]
    numbers = list(str(range(0,10)))
    count = 0
    for i in test:
        i = list(i)
        i = [x for x in i if x in numbers]
        i = "".join(str(e) for e in i)
        test[count] = i
        count = count + 1

    print test