.Append中的Python变量列表名称

时间:2016-02-27 01:07:52

标签: python python-2.7

要领导,我知道这是一个坏主意。字典看起来像是一种更干净的方式来做我需要做的事情,但我正在寻找一个占位符来把东西放在一块,同时我想出如何正确地使用字典来满足我的需要。

与此同时,我有十几个列表,我正在尝试设置列表名称以用于变量。

通常我会使用:

Listname.Append("Text")

但是在循环的不同迭代中,我希望能够使用从更大的字符串中拆分的不同列表。

类似的东西:

x1 = []
x2 = []
x3 = []

for y in 1 to 3:
    "x"+y.append("string")

同样,我知道这是一个坏主意,而我正试图绕过词典,但这相当于在我这样做时将胶带固定在一起的胶带。

我无法弄清楚如何让它发挥作用。它告诉我.append不能用于(我预期的)。我尝试用str()远程转换整个东西,但它当然告诉我你不附加到字符串。

我觉得这可能不是你想要做的事情,如果我通过IDE管理它会对我做些蠢事,但是有可能在第一时间吗?

6 个答案:

答案 0 :(得分:4)

你的问题的任何答案都比字典本身更难理解。无论如何,它就在这里。

如果您的列表是全局的,则它们存储在内置函数globals()返回的字典中。因此,您可以从该字典中获取这些列表,然后附加到它们。

所以你可以这样做:

x1 = []
x2 = []
x3 = []

for y in range(1, 4):
    x = globals()['x' + str(y)]
    x.append("string")

答案 1 :(得分:2)

将变量放入字典中。列表是通过引用传递的对象之一,因为列表是对复杂对象的引用。因此,如果您将其放在字典中,您仍然可以将其称为x1,但您也可以将其称为d["x1"],只要您不删除它或重新初始化即可它使用x1 = []

my_lists = {}
my_lists["x1"] = x1
my_lists["x2"] = x2
my_lists["x3"] = x3

for y in range(1,4):
    listname = "x" + str(y)
    my_lists[listname].append("string")

答案 2 :(得分:2)

字典确实是最优秀的解决方案。但是,如果你绝望需要解决方法,你可以利用locals

x1 = []
x2 = []
x3 = []

for y in 1 to 3:
    locals()["x"+str(y)].append("string")

这样做的另一个好处是可以在dict之后轻松替换,因为您实际上正在使用dict之类的内容。

说实话,在这种情况下,只用dict代替isn't that hard

我可以想象一些会使问题复杂化的情况:

如果变量在模块范围内并且它在一个函数中,那么也有类似的globals

如果这些是类或对象的属性,则可以使用getattr

class X(object):
    x1 = []
    x2 = []
    x3 = []

for y in 1 to 3:
    getattr(X, "x"+str(y)).append("string")

class Z(object):
    def __init__(self):
        self.x1 = []
        self.x2 = []
        self.x3 = []

z = Z()
for y in 1 to 3:
    getattr(z, "x"+str(y)).append("string")

答案 3 :(得分:1)

字典将对象与其他对象相关联。它们不是用Python学习的最糟糕的东西。

x = {}

for y in range(1, 4):
    if y not in x:
        # create array for entry y in x if it does not exist
        x[y] = []

    x[y].append('string')

答案 4 :(得分:0)

正如您所知,正确的方法是dictionary

但是,要做你想做的事,你可以使用 exec()

x1 = []
x2 = []
x3 = []

for y in range(1,3):
    exec("x"+str(y)+".append('string')")

重要的是要声明 不推荐 ,但这是您问题的答案。

答案 5 :(得分:0)

像其他人一样,字典就是你想要的。我想如果你真的只想使用列表,你可以这样做:

x_lst = [[], [], []]

for i in range(3):
    x_lst[i].append('string')

x1, x2, x3 = x_lst[0], x_lst[1], x_lst[2]

In [52]: x1, x2, x3
Out[52]: (['string'], ['string'], ['string'])

但是,这比仅仅学习使用词典要困难得多,这很容易理解。