Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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中的Shell样式列表生成还是变量表达式?_Python_Variables - Fatal编程技术网

Python中的Shell样式列表生成还是变量表达式?

Python中的Shell样式列表生成还是变量表达式?,python,variables,Python,Variables,----完全改写---- 我正在开发一个新类,其中每个实例基本上都是连续的和链接的。我曾经认为,如果我系统地命名这些实例,我可以用shell脚本的方式定义一个函数来编译所有这些实例的列表。然后我就可以做我想做的事情,也就是以某种方式浏览序列 但我看到这是一个糟糕的方法。根据我现在的理解,我应该做以下一项: 在类中包含嵌入式引用,从而创建递归数据结构 创建所有实例的列表,该列表可能在类init中更新,或者在创建新实例时更新 首先忘记定义新类,而使用其他对象的列表 我希望我已经说清楚了。再次感谢

----完全改写----

我正在开发一个新类,其中每个实例基本上都是连续的和链接的。我曾经认为,如果我系统地命名这些实例,我可以用shell脚本的方式定义一个函数来编译所有这些实例的列表。然后我就可以做我想做的事情,也就是以某种方式浏览序列

但我看到这是一个糟糕的方法。根据我现在的理解,我应该做以下一项:

  • 在类中包含嵌入式引用,从而创建递归数据结构
  • 创建所有实例的列表,该列表可能在类init中更新,或者在创建新实例时更新
  • 首先忘记定义新类,而使用其他对象的列表
我希望我已经说清楚了。再次感谢你的建议

-----原始但经过编辑的广义问题-----

你好,

我对Python比较陌生,我发现自己总是想生成某种现有对象的列表。假设我有三个名为x的变量,其中#是一个从1到3的数字。我很想写的代码是:

n=1
List_Of_X=[]
while n < 4:
  List_Of_X.append("x%s" % (n))
  n += 1
n=1
清单_Of_X=[]
当n<4时:
附加的列表(“X%s”%(n))
n+=1
当然,我最终得到的是字符串列表,而不是变量列表。那么,有没有办法“表达”与字符串对应的变量?或者更好的是,首先创建一个变量列表

编辑:关键不是手动指定列表-我想以某种方式实现自动化。从下面的答案看来,我可以使用上面公认的crummy方法生成字符串列表,然后使用eval()函数来表示它们。或者,首先使用某种复杂的方法生成对象列表

我觉得这两种解决方案可能都不是最佳实践,但我感谢所有的帮助!谢谢。

诸如此类:

list_of_x = [x1, x2, x3]
x1 = "foo"
x2 = "bar"
x3 = "goat"
大概是这样的:

list_of_x = [x1, x2, x3]
x1 = "foo"
x2 = "bar"
x3 = "goat"

如果您有这样的代码:

list_of_x = [x1, x2, x3]
x1 = "foo"
x2 = "bar"
x3 = "goat"
然后,应将其替换为:

x = ["foo", "bar", "goat"]
你可以做:

x = [x1, x2, x3]
map(eval,List_Of_X)
但这将把x1,x2,x3中的值复制到x中。对x所做的更改不会更改x1、x2、x3


如果此策略不适用于您,您需要向我们展示更多您正在做的事情,以便我们能够帮助您。

如果您有这样的代码:

list_of_x = [x1, x2, x3]
x1 = "foo"
x2 = "bar"
x3 = "goat"
然后,应将其替换为:

x = ["foo", "bar", "goat"]
你可以做:

x = [x1, x2, x3]
map(eval,List_Of_X)
但这将把x1,x2,x3中的值复制到x中。对x所做的更改不会更改x1、x2、x3

如果此策略不适用于您,您需要向我们展示更多您正在做的事情,以便我们能够帮助您。

您可以使用
vars()
locals()
、或
globals()
来创建新变量,尽管需要这样做是非常不寻常的:

for n in range(1, 4):
    vars()['x%s' % n] = n

>>> x1, x2, x3
<<< (1, 2, 3)
范围(1,4)内的n的
:
vars()['x%s'%n]=n
>>>x1,x2,x3
您可以使用
vars()
locals()
globals()
来创建新变量,尽管需要这样做是非常不寻常的:

for n in range(1, 4):
    vars()['x%s' % n] = n

>>> x1, x2, x3
<<< (1, 2, 3)
范围(1,4)内的n的
:
vars()['x%s'%n]=n
>>>x1,x2,x3

可以使用eval(var)将变量转换为其值

例如,在您的情况下,您可以:

x = [x1, x2, x3]
map(eval,List_Of_X)

如果要将字符串列表['x1','x2',…]转换为它们的值,例如[1,2,…]如果x1=1和x2=2

可以使用eval(var)将变量转换为其值

例如,在您的情况下,您可以:

x = [x1, x2, x3]
map(eval,List_Of_X)

如果您想将字符串列表['x1','x2',…]转换为它们的值,比如[1,2,…]如果x1=1和x2=2,我想您首先需要了解Python中没有变量。只有对对象的引用。因此,甚至考虑“创建变量”都是错误的。它们不存在。

我认为您首先需要了解Python中没有变量。只有对对象的引用。因此,甚至考虑“创建变量”都是错误的。它们不存在。

好的,所以部分谜团似乎是捕捉到了变量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>, ...]
C类(对象):
实例=[]
定义初始化(自):
C.instances.append(self)
x1=C()
x2=C()
x3=C()

C.instances#好的,所以部分谜团似乎是捕获变量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>, ...]
C类(对象):
实例=[]
定义初始化(自):
C.instances.append(self)
x1=C()
x2=C()
x3=C()

C.instances#首先为什么有名为
x1
x2
等的变量?你真正想做的是什么?这个谜团在被接受的答案的注释中被解开了。为什么你首先要把变量命名为
x1
x2
,等等?用一个列表,你到底想做什么