如何在Python3.x中从拆分数组创建动态数量的变量?

如何在Python3.x中从拆分数组创建动态数量的变量?,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个熊猫数据帧df,我正在使用numpysplit\u数组来拆分它。然后我将变量a、b、c、d分配给这些分割块 num_partitions = 4 # number of variables needs to be the same as num_partitions a,b,c,d = np.array_split(df, num_partitions) # do work on a,b,c,d . . . 我的问题是,如果num_分区发生变化,我如何动态创建这些变量并将它们分配给分割

我有一个熊猫数据帧
df
,我正在使用numpy
split\u数组来拆分它。然后我将变量
a、b、c、d
分配给这些分割块

num_partitions = 4
# number of variables needs to be the same as num_partitions
a,b,c,d = np.array_split(df, num_partitions)
# do work on a,b,c,d
.
.
.

我的问题是,如果
num_分区
发生变化,我如何动态创建这些变量并将它们分配给分割块?因此,例如,如果
num\u partitions
更改为100,那么我必须在当前方法中手动键入变量
var\u 0,…,var\u 99
,因为明显的原因,我不想这样做。如果不总是使用exec分配变量是一个非常糟糕的主意,请提前感谢,我强烈建议您不要这样做。但既然你问了,这是密码。更好的做法是使用字典,而不是动态分配变量

import string
chars=string.ascii_letters
num_partitions = 4
for i,j in np.array_split(df, num_partitions),range(num_partitions):
    exec("{}={}".format(chars[j],i))
# do work on a,b,c,d...
.
.
.

请注意,这将只支持多达52个。只需将字符列表加长。

如果您使用的数据列表很长,最好使用python容器,如类、字典或数组本身。自动创建全局变量可能会意外覆盖内置关键字并产生问题

最好的管理方法是使用列表,因为它最能代表数据

arr=list(np.array_split(df,num_partitions))
arr[0]#same as using variable 'a'

arr.sort()      #sorts it
arr.reverse()   #reverses it
arr.index(val)  #finds the position of a value in the index
如果你真的非常想用字母,那么类是很好的:

class contain:
    def __init__(self,arr):
        for i in range(len(arr)):
            key=''.join([chr(int(j)+97) for j in str(i)])
            setattr(self,key,arr[i])

 c=contain(arr)
 c.a    #same output as arr[0]
 c.ba   #same as arr[11]
其中任何一个都可以作为变量解析到内存中的同一位置,并且可以在所有相同的位置使用。只是一个什么最适合你的问题


祝您好运

您应该使用列表或字典来存储拆分数组。 使用列表很容易:

chunks = np.array_split(df, num_partitions)
如果您喜欢使用字典,如注释中的,请不要多次调用
array\u split
,而是使用
zip

chunks = dict(zip(range(num_partitions), np.array_split(df, num_partitions))

为什么不把它们作为dict或值列表呢?只要使用字典就可以了。像你想的那样污染全局名称空间几乎总是一个可怕的想法。谢谢,我想我在想除了使用字典之外,是否还有其他方法可以做到这一点。但是使用字典的答案很简单,比如
num\u partitions=4;chunks_dict={i:np.array_split(df,num_partitions)[i]表示范围内的i(len(num_partitions))}为什么需要变量?甚至是字典钥匙<代码>拆分
已经为您提供了一个列表。通常列表更容易使用,尤其是当名称或键以某种“数字”顺序排列时。@Zero我也同意你的看法。只要用字典就好了。。。大多数(如果不是总是)使用exec分配变量是个坏主意。但那是他们的问题,所以我回答了。@Zero我在开头加了一个免责声明。:)