Python中的枚举和2D数组?

问题描述 投票:0回答:2

我目前正在使用Python编写一些代码,我有以下枚举:

#Enumeration - matter type
matterType = ['matter', 'antimatter']
enumMatterType = enumerate(matterType)

#Enumeration  - flavor
flavor = ['electron', 'mu', 'tau']
enumFlavor = enumerate(flavor)

我还创建了一个2D数组:

alpha = [[alpha_electron, alpha_anti_electron], 
        [alpha_mu, alpha_anti_mu], 
        [alpha_tau, alpha_anti_tau]]

这应该是我之前定义的常量数组。我在等式中使用这些常量,但我将它们称为alpha[0][0]alpha[0][1]等。我觉得当有人看我的代码时,如果我有像alpha[matter][electron]alpha[antimatter][electron]这样的东西,他们会更好地理解它。有没有办法使用前面的枚举来定义我的数组中的变量?我如何在一般情况下对数组使用枚举?我怎么能用枚举写我的alpha值?如果这部分内容没有意义,请告诉我 - 我很乐意澄清。

python arrays multidimensional-array enums enumeration
2个回答
0
投票

您应该考虑使用元组键的字典:

matterType = ['matter', 'antimatter']
flavor = ['electron', 'mu', 'tau']

alpha = [['alpha_electron', 'alpha_anti_electron'], 
        ['alpha_mu', 'alpha_anti_mu'], 
        ['alpha_tau', 'alpha_anti_tau']]

ref_dict = {}
for x, pair_item in enumerate(flavor):
    for y, item in enumerate(matterType):
        ref_dict[(item, pair_item)] = alpha[x][y]

现在让我们说我想要“问题”和“mu”:

In[60]: ref_dict[('matter', 'mu')]
Out[60]: 'alpha_mu'

0
投票

如果你想创建一组枚举常量,那就是enum模块的用途。

在您的情况下,您需要具有整数值的枚举常量,因此您可以将它们用作列表的索引。为此,你想要IntEnum

from enum import IntEnum

class MatterType(IntEnum):
    MATTER = 0
    ANTIMATTER = 1

class Flavor(IntEnum):
    ELECTRON = 0
    MU = 1
    TAU = 2

现在,而不是这个:

alpha[0][0]

......你可以这样写:

alpha[MatterType.MATTER][Flavor.ELECTRON]
© www.soinside.com 2019 - 2024. All rights reserved.