要领导,我知道这是一个坏主意。字典看起来像是一种更干净的方式来做我需要做的事情,但我正在寻找一个占位符来把东西放在一块,同时我想出如何正确地使用字典来满足我的需要。
与此同时,我有十几个列表,我正在尝试设置列表名称以用于变量。
通常我会使用:
Listname.Append("Text")
但是在循环的不同迭代中,我希望能够使用从更大的字符串中拆分的不同列表。
类似的东西:
x1 = []
x2 = []
x3 = []
for y in 1 to 3:
"x"+y.append("string")
同样,我知道这是一个坏主意,而我正试图绕过词典,但这相当于在我这样做时将胶带固定在一起的胶带。
我无法弄清楚如何让它发挥作用。它告诉我.append不能用于(我预期的)。我尝试用str()远程转换整个东西,但它当然告诉我你不附加到字符串。
我觉得这可能不是你想要做的事情,如果我通过IDE管理它会对我做些蠢事,但是有可能在第一时间吗?
答案 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'])
但是,这比仅仅学习使用词典要困难得多,这很容易理解。