我正在编写一段代码,其输入根据离散时间步长而变化。对于每个时间步,我得到输入的新值。 如何将每个值存储为列表?
以下是一个例子:
"""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]
答案 0 :(得分:2)
请参阅下面的评论,但根据您提供的其他信息,请将其替换为:
n.append(d)
用这个:
n.append(d[:])
答案 1 :(得分:2)
哪个类型是变量' d'?如果它是,例如一个列表,你显示的代码会推送到列表&n;' n'对变量的引用' d'而不是它的副本。因此,对于循环的每次迭代,您都会添加一个新的引用' d' (如C中的指针)到' n'以及当' d'更新了' n'中的所有条目当然,有相同的价值 要解决此问题,您可以修改代码,以附加' 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]