存储变化变量的每个值

时间:2015-07-10 05:26:26

标签: python

我正在编写一段代码,其输入根据离散时间步长而变化。对于每个时间步,我得到输入的新值。 如何将每个值存储为列表?

以下是一个例子:

"""when t = 0, d = a
   when t = 1, d = b
   when t = 2, d = c"""

n = []
n.append(d)      #d is the changing variable
for i in range(t):
    n.append(d)

我期望获得的是: for t = 0, n = [a]; for t = 1, n = [a,b]; and for t = 2, n = [a,b,c]

我实际得到的是:  for t = 0, n = [a], for t = 1, n = [b,b];for t = 2, n = [c,c,c]

5 个答案:

答案 0 :(得分:2)

请参阅下面的评论,但根据您提供的其他信息,请将其替换为:

n.append(d)

用这个:

n.append(d[:])

答案 1 :(得分:2)

哪个类型是变量' d'?如果它是,例如一个列表,你显示的代码会推送到列表&n;' n'对变量的引用' d'而不是它的副本。因此,对于循环的每次迭代,您都会添加一个新的引用' d' (如C中的指针)到' n'以及当' d'更新了' n'中的所有条目当然,有相同的价值 要解决此问题,您可以修改代码,以附加' d'的副本:

  • n.append(d [:])
  • n.append(列表(d))
  • n.append(元组(d))

答案 2 :(得分:1)

你可以简单地这样做

n = []
for i in range(t + 1):
    n.append(chr(i+ord('a'))

如果您不想在列表中存储字符而不是与d相关的某些特定值,那么您必须在for循环中更改d

n = []
d = 1
for i in range(t + 1):
    n.append(d)
    d += 2

答案 3 :(得分:0)

没有看到代码就很难说。但如果d不是int,则可能发生这种情况。例如,d是一个列表,它通过引用传递

n = []
d = [1]
n.append(d)

d[0] = 2
n.append(d)
print(n)
>>>> [[2], [2]]

因此,如果刚刚修改了每个新的d,就会出现问题。你可以通过复制d:

来解决它
from copy import copy
n = []
d = [1]
n.append(copy(d))

d[0] = 2
n.append(copy(d))
print(n)
>>>> [[1], [2]]

答案 4 :(得分:0)

如果您只是将变量包装在对象中,则可以通过覆盖__setattr__方法来查看对变量设置的内容。一个简单的例子。

class DummyClass(object):
    def __init__(self, x):
        self.history_of_x=[]
        self.x = x
        self._locked = True
    def __setattr__(self, name, value):
        self.__dict__[name] = value
        if name == "x":
            self.history_of_x.append(value)

d = DummyClass(4)
d.x=0
d.x=2
d.x=3
d.x=45
print d.history_of_x

输出: -

[4, 0, 2, 3, 45]