Python 中的枚举和二维数组?
Enumeration and 2D arrays in Python?
我目前正在 Python 中编写一些代码,我有以下枚举:
#Enumeration - matter type
matterType = ['matter', 'antimatter']
enumMatterType = enumerate(matterType)
#Enumeration - flavor
flavor = ['electron', 'mu', 'tau']
enumFlavor = enumerate(flavor)
我还创建了一个二维数组:
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 值?如果其中任何部分没有意义,请告诉我 - 我很乐意澄清。
您应该考虑使用元组键的字典:
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]
现在假设我想要 "matter" 和 "mu":
In[60]: ref_dict[('matter', 'mu')]
Out[60]: 'alpha_mu'
如果您想创建一组枚举常量,这正是 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]
我采用的一种简单方法是:
from enum import Enum
ENUM_VAR_NAME = Enum('ENUM_VAR_NAME',['var1',var2',var3'])
ENUM_VAR_NAME.var1
我目前正在 Python 中编写一些代码,我有以下枚举:
#Enumeration - matter type
matterType = ['matter', 'antimatter']
enumMatterType = enumerate(matterType)
#Enumeration - flavor
flavor = ['electron', 'mu', 'tau']
enumFlavor = enumerate(flavor)
我还创建了一个二维数组:
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 值?如果其中任何部分没有意义,请告诉我 - 我很乐意澄清。
您应该考虑使用元组键的字典:
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]
现在假设我想要 "matter" 和 "mu":
In[60]: ref_dict[('matter', 'mu')]
Out[60]: 'alpha_mu'
如果您想创建一组枚举常量,这正是 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]
我采用的一种简单方法是:
from enum import Enum
ENUM_VAR_NAME = Enum('ENUM_VAR_NAME',['var1',var2',var3'])
ENUM_VAR_NAME.var1