В настоящее время я работаю над кодом на 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]
. Есть ли способ использовать перечисление из предыдущего для определения моих переменных из массива, подобного этому? Как вообще использовать перечисление с массивами? Как я могу записать свои альфа-значения с помощью перечисления? Пожалуйста, дайте мне знать, если какая-либо часть этого не имеет смысла - я буду рад уточнить.
Думаю, вы ищете enum.IntEnum
?
Это не массивы, это списки
Вам следует рассмотреть словарь с ключами кортежа:
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]
Теперь предположим, что я хочу "материя" и "му":
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]
alpha[matter][electron]
был бы невозможен, потому что они должны были бы быть фиксированными значениями дляmatter
иelectron
. Рассмотрим словарь с ключом кортежа?