为什么我的集合理解会抛出 TypeError?

Why does my set comprehension throw a TypeError?

我试图用这个集合理解来改变我的原始代码

next_states = {next_states | self.transition_function[(state, 
    input_value)] for state in e_closure_states}

但是这段代码抛出

TypeError: unhashable type: 'set'

原始代码(按预期工作)。另外,应该提到 self.transition_function[(state, input_value)] 已设置,这就是我使用 union 的原因。提前致谢

for state in e_closure_states:
    next_states = next_states | self.transition_function[(state, input_value)]

发生错误 TypeError: unhashable type: 'set' 是因为您试图将一个集合添加为另一个集合的元素。正如错误消息所暗示的那样,集合只能包含可散列的元素,而集合本身是不可散列的。

我不完全确定我理解你想做什么,但请告诉我这段代码是否产生与你知道正确的 for 循环相同的结果:

next_states = set.union(next_states, *(self.transition_function[(state, input_value)] for state in e_closure_states))

self.transition_function[(state, input_value)] 是从您的代码中复制的。那是在 generator, as indicated by the parentheses. The asterisk (*) unpacks the generator into the set.union() call. You can read more about that here 里面。