为什么我的集合理解会抛出 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 里面。
我试图用这个集合理解来改变我的原始代码
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 里面。