----完成改述----
我正在开发一个新类,其中每个实例基本上是顺序和链接的。我曾经以一种非常shell的方式思考,如果系统地命名它,我可以定义一个函数来编译所有这些实例的列表。然后我可以在第一时间做我想做的事情,它以某种方式浏览序列。
但我发现这是一种糟糕的做法。据我所知,我应该改为:
我希望我能做到这一点。再次感谢您的建议。
-----原创但经过编辑的广义问题-----
您好,
我对Python比较陌生,我发现自己总是希望生成某种现有对象的列表。假设我有三个名为x#的变量,其中#是1到3之间的数字。我觉得写的代码类似于:
n=1
List_Of_X=[]
while n < 4:
List_Of_X.append("x%s" % (n))
n += 1
但当然我最终会得到一个字符串而不是变量列表。那么,有没有办法“表达”与字符串对应的变量?或者更好的是,首先创建一个变量列表?
编辑:关键是没有手动指定列表 - 我想以某种方式自动化它。从下面的答案中可以看出,我可以使用上面公认的crummy方法生成字符串列表,然后使用eval()函数来表达它们。或者,使用一种稍微复杂的方法来生成对象列表。
我觉得任何一种解决方案可能都不是最好的做法,但我感谢所有的帮助!感谢。
答案 0 :(得分:1)
这样的事情:
list_of_x = [x1, x2, x3]
答案 1 :(得分:1)
如果你有这样的代码:
x1 = "foo"
x2 = "bar"
x3 = "goat"
然后你应该用:
替换它x = ["foo", "bar", "goat"]
你可以这样做:
x = [x1, x2, x3]
但是这会将x1,x2,x3中的值复制到x中。对x所做的更改不会更改x1,x2,x3。
如果此策略不适合您,您需要向我们展示更多您正在做的事情,以便我们为您提供帮助。
答案 2 :(得分:0)
您可以使用vars()
,locals()
或globals()
创建新变量,但需要这样做非常不寻常:
for n in range(1, 4):
vars()['x%s' % n] = n
>>> x1, x2, x3
<<< (1, 2, 3)
答案 3 :(得分:0)
好的,所以神秘的一部分似乎是捕捉你的变量x1,x2,......当它们出现时。如果你设法做到这一点,应该很容易在列表中收集它们,对吧?!因此,您必须寻找实际为其分配值的地方x1 = ...
,x2 = ...
......
也许您正在从文件或用户输入中读取这些值?! - 让我们详细说明Eevee在评论中提到的一个案例,其中x1,x2,......实际上是用户定义类的实例。然后,不是在分配一个xN后手动将其附加到列表中,您可以让课程为您进行录制:
class C(object):
instances = []
def __init__(self):
C.instances.append(self)
x1=C()
x2=C()
x3=C()
C.instances # <= [<__main__.C object at 0x01293230>, ...]
所以你在一个不错的列表中捕获了x1,x2,...的值。这有帮助吗?
答案 4 :(得分:-2)
我认为您首先需要了解Python中没有变量。只有对象的引用。所以即使考虑“创造变量”也是错误的。它们不存在。
答案 5 :(得分:-3)
您可以使用eval(var)
将变量转换为其值例如,在您的情况下,您可以这样做:
map(eval,List_Of_X)
如果你想将你的字符串列表['x1','x2',...]转换成它们的值,比如说[1,2,...]如果x1 = 1且x2 = 2