对于循环列表未更新

时间:2019-10-21 04:12:32

标签: python-3.x string loops

这应该是一个简单的问题,但是目前我还不明白为什么。下面是一个简单的代码,该代码假定对所有字符串进行条带化并将其转换为int。但是结果与我写的不一致。

num = ('"28"', '"23"', '"35"', '"50"', 29488)
for i in num:
    if type(i) is str:
        i = i[1:-1]
        print(i)
print(num)

预期产量

28 23 35 50 (28,23,35,50,29488)

实际输出

28 23 35 50 ('“” 28“','” 23“','” 35“','” 50“',29488)

当我以为是一个列表时,才发现我有一个元组...

2 个答案:

答案 0 :(得分:1)

有一些问题要解决

  1. 字符串是不可变的,因此您并没有真正更改列表中的任何内容,只是重新分配了循环变量

  2. 您不会将任何内容转换为整数,而只是从字符串中删除字符

  3. 如果您希望能够重新分配num中的元素,则需要使用实际的列表变量

例如

num = ['"28"', '"23"', '"35"', '"50"', 29488] 
for i, n in enumerate(num):
    if isinstance(n, str):
        num[i] = int(n.strip('"')) 
        print(n)
print(num)

答案 1 :(得分:0)

  • 重新分配到索引位置丢失
  • 组是不可变的,不能使用索引位置设置值。

您可以参考@ cricket_007给出的答案,如果您想使用单行列表压缩方式,请参考以下-

num = tuple(int(n.strip('"')) if isinstance(n, str) else n for n in num)

然后您将再次获得新的元组,并将其值转换为int。