在Python中,如何在循环中创建大量变量?

2024-10-08 18:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

在python3.2中,我正在寻找一种方法来创建大量的变量并为它们赋值。有点像

X = 10
Y = 10
A = 0
B = 0
while X >= 0:
    while Y >= 0:
        cell[C]X[A] = A
        cell[C]Y[B] = B
        B = B + 1
        Y = Y - 1
        C = C + 1
    A = A + 1
    X = X - 1

这将优化创建200个变量cell1X1、cell1Y1、cell2X1、cell2Y2等

这可能吗?怎么做?在

请记住,我对python还是很陌生的,所以请尽量简化。在

另外,虽然我知道还有其他方法可以做到这一点,而且它们可能更好,但我仍然想知道如何用这种方法来做事情。在

我知道字典可能在各个方面都更好,但这不是我想要的。在

谢谢你的帮助。在

编辑:当我说python新手的时候,我的意思是说对一般编程不熟悉。就像很新的。就像,最近刚学会了如何写函数。在


Tags: 方法编辑字典编程cell事情学会赋值
3条回答

这里又黑又黑,但你可以试试:

 for i in range(100):
     locals()['A%i'%i] = i

但请不要这样做。这通常是很糟糕的练习。在

正如@delnan指出的,它可能在某些python版本和实现上不起作用。locals()是本地命名空间,它是Python实现的一部分。你真的不想玩它。在

你不想这么做的另一个更重要的原因-这是一个安全性和可靠性的噩梦。你看不到所有的变量名是什么,所以你可能会意外地覆盖你的其他变量之一。你从同一个地方得到所有这些“变量”,所以把它们放在字典里是合乎逻辑的。在

我将解释它的工作原理,至少在某些情况下是这样的:本地名称空间通常被实现为字典,locals()有时会返回本地名称空间字典,而不是副本。在

那完全没有道理吗?在

Python变量就像字典中的条目。有一个用于模块的名称空间,一个用于函数的名称空间,一个“全局”名称空间,依此类推。locals()得到最局部的名称空间,globals()得到全局名称空间。在

如果本地名称空间实际上是作为字典实现的,那么您可以通过编辑locals()(深入到python解释器的内部)来编辑它。但是,有时本地命名空间没有作为字典实现(出于性能原因),这发生在函数内部。在这种情况下,locals()将给您一个名称空间的副本,您将无法编辑它(或者至少,它不会更改本地名称空间)。在

还在困惑吗?别这么做。在

老实说,这个问题唯一合理的答案是:不要这样做,而是学习如何使用字典。

我相信这也是最有帮助的答案。你已经在你的问题中指出:(1)你对Python不熟悉,(2)你对一般编程还不熟悉,(3)你承认字典在各个方面都比你所问的更好。在

你说你问的是“为了学习目的”。好吧,更有成效的方法是先多学一点语言,然后再坚持用一种方法去做你承认语言本身并不鼓励的事情,当然也不会受到任何人的鼓励。在

在这种情况下,学习字典是如何工作的。我觉得你不会觉得很复杂。即使你真的理解了,你仍然值得花时间和精力去真正理解它们,因为字典是Python的一个非常基本的特性。它们在Python中被广泛使用,即使您不坚持使用Python,许多其他语言也会大量使用相同的概念(尽管通常使用不同的名称,例如“associative array”、“hash”、“table”或其他东西)。在

在你熟悉了字典本身之后,如果你仍然不知道如何将它们应用于某些特定的编程问题,那么也许是时候问另一个问题了。在

就像其他人说的那样:不要那样做。不幸的是,你的程序没有办法让变量的名称依赖于变量(实际上,有方法做到这一点,但这很复杂,而且很少是正确的方法)。在

有必要指出的是,你不应该这样做的原因不仅仅是因为它在Python中很复杂,但是,想要这样做表明了对大多数语言中代码(包括语言中事物的名称)和数据(事物的可变值)之间的区别的根本误解。在

在这种情况下,您实际需要的是字典、列表或类似的东西:

至少在您的示例中,您只有两种类型的东西,分别称为cell[C]X[A]和{}。你可以把它们变成cellX[A,B]和{},这两个在python中是完全合法的结构。在

所以在循环之前,先这样做,初始化一个空字典。在

cellX = {}
cellY = {}

然后,在循环内,你可以

^{pr2}$

还要注意你的循环,就像现在一样,不是很“Python”。您应该考虑像for X in range(10,-1,-1):这样的循环

相关问题 更多 >

    热门问题