Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用循环创建变量?_Python_Python 2.7_Class_Variables_Enumeration - Fatal编程技术网

Python 如何使用循环创建变量?

Python 如何使用循环创建变量?,python,python-2.7,class,variables,enumeration,Python,Python 2.7,Class,Variables,Enumeration,所以,我想从我循环的列表中创建类实例。怎么做 class foo: def __init__(self, first, second): self.first = first self.second = second my_list = [[a_0, a_1, a_2], [b_0, b_1, b_2], [c_0, c_1, c_2]] i = 1 instance_name = instance_ for list in my_list: x = ins

所以,我想从我循环的列表中创建类实例。怎么做

class foo:
   def __init__(self, first, second):
      self.first = first
      self.second = second

my_list = [[a_0, a_1, a_2], [b_0, b_1, b_2], [c_0, c_1, c_2]]
i = 1
instance_name = instance_
for list in my_list:
   x = instance_name + str(i)
   x = foo(list[0], list[2])
   i += 1

我知道循环中的第二个x是完全错误的。但是我需要能够在将来使用x值调用我的实例。有什么帮助吗?

只需使用列表理解并在该列表中构造实例:

class Foo:

    def __init__(self, first, second):
        self.first = first
        self.second = second


# List of parameters to pass to Foo
args_list = [(1, 2), (3, 4), (5, 6)]

# Add an instance of Foo(first num, second num) to the instances list
# for every set of arguments above
instances = [Foo(value[0], value[1]) for value in args_list]


# Print out each of the instances values
for instance in instances:
    print(instance.first, instance.second)
# prints:
# 1 2
# 3 4
# 5 6

# OR you can call an individual instance like so

print(instances[0].first, instances[0].second)
# prints:
# 1 2

正如@roganjosh的评论所说,变量
x
的数据被过度写入,因此如果要创建变量,请使用
locals()
,但这不是一个好的做法。最好使用字典来存储实例,即

class foo:
    def __init__(self, first, second):
        self.first = first
        self.second = second

a_0,a_1,a_2 = 1,2,3
b_0,b_1,b_2 = 4,5,6
c_0,c_1,c_2 = 7,8,9

my_list = [[a_0, a_1, a_2], [b_0, b_1, b_2], [c_0, c_1, c_2]]

for i,li in enumerate(my_list):
    locals()['instance_{}'.format(i+1)] = foo(li[0], li[2])
# instance_1.first 
# 1
# instance_3.first
# 7
字典方法是:

x = {'instance_{}'.format(i+1): foo(li[0], li[2]) for i,li in enumerate(my_list) }

#x['instance_1'].first
#1

将实例附加到另一个列表。目前它们被丢弃并被覆盖。我试过了,但就是不起作用。你能给我举个例子吗?@user627154查看我的答案。@user627154我发布了一个答案,其中有一个例子说明了罗甘约什告诉你要做什么。这主意不错,但你已经调整了输入以适应你的答案。使用列表索引处理OP的实际data@roganjosh你的意思是把
元组
改成
列表
?不,因为OP在每个子列表中有3个项目,所以这不起作用。@roganjosh啊,我现在明白了。一开始他没听清楚,因为他只使用了底部的前两个。谢谢