Python 如何自动处理变量?

Python 如何自动处理变量?,python,Python,我有一系列数组,其中包含数字,如下所示: array1 = [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8] array2 = [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0] array3 = [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65] array4 = [52,70,95,23,4,60,

我有一系列数组,其中包含数字,如下所示:

array1 = [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8]
array2 = [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0]
array3 = [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65]
array4 = [52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91]
array5 = [22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80]
array6 = [24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50]
array7 = [32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70]
array8 = [67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21]
array9 = [24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72]
array10 = [21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95]
array11 = [78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92]
array12 = [16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57]
array13 = [86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58]
array14 = [19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40]
array15 = [4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66]
array16 = [88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69]
array17 = [4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36]
array18 = [20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16]
array19 = [20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54]
array20 = [1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48]
我希望能够在一个数组中打印每个数字,然后向下移动到下一个数组,并从那里继续,所有这些都在一小段代码中完成

我可以这样做吗?可能与数组&y[i]类似,或者这是不可能的?

试一试:

my_lists = [array1, array2, array3, array4, array5, array6, array7, array8, array9, array10, array11, array12, array13, array14, array15, array16, array17, array18, array19, array20]
for l in my_lists:
    for n in l:
        print n
您还可以使用locals方法,该方法允许您通过名称访问所有变量

for i in range(20):
  now = locals()[ 'array' + str(i+1) ]
  for x in now:
    print x

我想你想把所有的数组合并在一起。在本例中,您可以使用eval来计算python代码字符串

BigArray = []
for k in range(1, 21): 
    BigArray = eval('BigArray + array%d'%k)
print BigArray
但无论哪种方式,它都需要将所有内容都放在一个列表中


arrays=[evalarray+strx for x in range 1,21]是一个奇特的列表理解/eval,它列出了所有编号的数组

您遇到的困难表明您没有选择正确的数据结构。您需要使用一个容器来保存列表,可以是嵌套列表结构,也可以是字典。我不会采用基于变量名的方法

使用列表:

container = [[8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8],
             [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0],
             [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65],
             ...
            ]
然后迭代容器和每个数组:

for array in container:
   for item in array:
       # do something
for key in sorted(container.keys()):
    for item in container[key]:
        # do something
或使用字典:

container = { 1 : [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8],
              2 : [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0],
              3 : [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65],
              ... 
            }
然后迭代键和每个数组:

for array in container:
   for item in array:
       # do something
for key in sorted(container.keys()):
    for item in container[key]:
        # do something

你应该有一个列表列表,而不是20个列表。问题:为什么你的代码中会有20个这样的硬编码数组?注释:在我看来,在字典中保存这样的内容要好得多——这使得访问可变数量的列表更加容易。或者你可以有一个列表。今天似乎是我想要很多变量的一天。请阅读和了解更多关于为什么20个列表的列表比20个单独列表更好的解释;这是学习如何避免常见陷阱的一个非常好的来源。顺便说一句,否决评估导致的问题比它解决的问题还多。。。因为它可以用来执行有害的代码…除了安全问题,它还提供了缓慢的代码、难以调试的代码、人类读者、Linter和IDE无法分辨的代码……如果您确实需要动态访问变量,请使用globals/locals/getattr/等。但通常,如果你认为你需要动态访问变量,那么首先你就做错了。所以我被否决不是因为我使用eval的方式,而是因为一些程序员使用eval的方式特别不安全,比如评估用户输入。[x表示全局中的x,如果在x中使用“数组”或类似的方式,那么这真的是一种更好的方法吗?@TehTris:是的,全局确实是一种比eval更好的方法。重写代码,使其不需要任何一个,这是比任何一个都好的方法。除了安全问题之外,我还解释了一些原因。在另一篇评论中,我链接到了两篇博文,这两篇博文更详细。不为任何好处而刻意让代码变得不那么可读、不那么内省、不那么可调试、不那么高效、不那么通俗不是一件好事。是的,我和我的一个朋友谈过,他强调显式比隐式好。所以就拿array1+array2。。。而反复研究这一点会更好。全面的我同意。两种方法都使用globals和eval suck。或者对于key,value in sortedcontainer.items:对于value中的item…我同意K DawG的观点,eval可能是危险的,但无论如何,它是存在的。用户可以自行考虑风险水平。另一方面假设array1,array2。。。这不是组织数据的最佳方式,我无法想象有任何其他方式来解决这个问题,不包括要求以其他形式排列的数据。这不仅关乎安全,还关乎可读性、内省性、可调试性、效率等。使用eval几乎总是任何问题的错误答案。它的存在是因为几乎总是不总是。例如,它显然是构建Python表达式解释器的正确答案。这并不意味着你应该在任何地方都使用它。那么,为什么要投否决票呢?它正好解决了OP的问题。我不知道是谁否决了这一条,因为它显然比基利科和特赫特里斯的答案要好。正如sudo_O所建议的,最好解释OP的数据结构有什么问题,但也说明如何按原样操作并不可怕。也许事实上,没有迹象表明这段代码在一个函数中,而创建了很多这样的变量的人几乎总是在创建很多全局变量,所以你应该在这里使用全局变量而不是局部变量?