1

我有以下内容:

class Trade:
    def __init__(self):
        entry = [0, 1, 2, 3]
        exit = [1, 2, 3, 4]
        met = [0, 0, 0, 0]
        self.stats = zip(entry, exit, met)



t = Trade()

for entry, exit, met in t.stats:
        met = 1

for entry, exit, met in t.stats:
    print(entry, exit, met)

我期望 的所有值met都是 1。但事实并非如此。这是什么原因,我怎样才能使它的修改met反映在Trade class t. for 语句是否生成 t.stats 的副本而不是遍历其原始副本?

4

2 回答 2

6

当您遍历列表的值时,这些值将分配给局部变量。更改这些局部变量不会更改存储在列表中的原始值。

使用enumerate()调用添加索引,然后使用该索引更改原始列表:

for i, (entry, exit, met) in enumerate(t.stats):
    t.stats[i] = (entry, exit, 1)
于 2013-01-23T16:19:35.970 回答
2

以下将做到这一点:

t.stats[:] = [(entry, exit, 1) for entry, exit, met in t.stats]

您的代码不起作用的原因是它met = 1只是重新绑定met到其他地方。这对 没有影响t.stats

于 2013-01-23T16:21:47.853 回答