【发布时间】:2011-12-30 11:55:29
【问题描述】:
我正在编写一个 N 阶马尔可夫链。
它是这样的:
class Chain:
def __init__(self, order):
self.order = order
self.state_table = {}
def train(self, next_state, *prev_states):
if len(prev_states) != self.order: raise ValueError("prev_states does not match chain order")
if prev_states in self.state_table:
if next_state in self.state_table[prev_states]:
self.state_table[prev_states][next_state] += 1
else:
self.state_table[prev_states][next_state] = 0
else:
self.state_table[prev_states] = {next_state: 0}
不幸的是,列表和元组是不可散列的,我不能将它们用作字典中的关键字... 希望我已经很好地解释了我的问题,以便您了解我试图实现的目标。
关于如何为字典关键字使用多个值有什么好的想法吗?
后续问题:
我不知道元组是可散列的。 但是哈希的熵似乎很低。元组是否可能存在哈希冲突?!
【问题讨论】:
-
列表和元组是不可散列的 - 元组是可散列的。 (如果他们的内容是可散列的,正如@larsmans 正确指出的那样)
-
一个空格缩进?读起来非常难看。您应该遵循 PEP-8 并使用 4 空格缩进。
-
eumiro,谢谢!添加了有关哈希冲突的后续问题
标签: python dictionary markov-chains