在Python中遍历压缩列表

1 投票
2 回答
3784 浏览
提问于 2025-04-17 13:25

我有以下内容:

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 的一个副本,而不是直接操作它的原始数据吗?

2 个回答

2

下面的代码可以解决这个问题:

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

你代码不工作的原因是因为 met = 1 只是把 met 这个变量重新指向了别的地方。这对 t.stats 没有什么影响。

6

当你遍历一个列表中的值时,这些值会被赋给一些临时变量。修改这些临时变量并不会改变列表中原本存储的值。

可以使用 enumerate() 函数来添加索引,然后用这个索引来修改原来的列表:

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

撰写回答