在for循环中调用列表中的变量

时间:2018-03-24 05:32:43

标签: python for-loop

我有一个变量列表,我希望将其转换为数字而不是k,M,B等,如果语句看起来很好,但我不知道如何从列表中调用结果。

A = '1.23k'
B = '2.34k'

items = [A, B]
d = {'k': 3, 'M': 6}

for item in items:
    item = str(item)
    if item[-1] in d:
        num, magnitude = item[:-1], item[-1]
        item = float(num) * 10 ** d[magnitude]
    else:
        item = float(item)
A = items[0]
B = items[1]

我以为我以后可以像上面那样引用A和B,但似乎item在每个for循环后都没有链接回A和B. (我觉得这并不难,但我完全陷入困境。)

你会怎么做?感谢。

更新:我可能有C,D,E等,稍后再添加到列表中。

2 个答案:

答案 0 :(得分:3)

当您将更新后的值存储在item中时,您不会更改列表中相应位置所指向的内容。您只需更改变量item所指向的内容。如果要更改列表中的值,则需要在列表中使用基于范围的for循环和索引。这样,您就可以更新列表中存储的值:

A = 1.23k
B = 2.34k

items = [A, B]
d = {'k': 3, 'M': 6}

for i in range(len(items)):
    item = str(items[i])
    if item[-1] in d:
        num, magnitude = item[:-1], item[-1]
        items[i] = float(num) * 10 ** d[magnitude]
    else:
        items[i] = float(item)
A = items[0]
B = items[1]

答案 1 :(得分:2)

循环中的项是局部变量,更改它的值不会影响全局项数组。 你应该在循环中编辑全局项数组,

你可以快速完成,

for i in range(0,len(items)):

并按

替换项目
items[i]

因此您将直接更改items变量的值 所以最后这个循环将完成这项工作

for i in range (0,len(items)):
    if item[i][-1] in d:
        num, magnitude = item[i][:-1], item[i][-1]
        item[i] = float(num) * 10 ** d[magnitude]
    else:
        item[i] = float(item[i])