【发布时间】:2016-11-29 22:32:15
【问题描述】:
假设我有一个动作列表,其中可以包含三种不同类型的动作:
类型 A:可以包含所有类型的动作(析取)
B 类:可以包含所有类型的操作(有序连词)
C 类:不能包含子操作。这是我最终想要达到的水平。
我想过(基于:python - representing boolean expressions with lists)析取和合取可以分别用一个元组和一个列表来表示,但我不确定这是否是最佳解决方案。
对于类型 A 和 B,有一个包含类型元素的 dict,例如
type_a = {
‘a1’: ('b1', 'a2'),
‘a2’: ('c1', 'c2')
}
type_b = {
‘b1’: ['c4', 'c5', 'c7'],
‘b2’:['c3', 'c4']
}
详细解释:
‘a1’等于('b1', 'a2'),等于(['c4', 'c5','c7'], 'c1', 'c2')
‘a2’等于('c1', 'c2')
‘b1’等于['c4', 'c5', 'c7']
‘b2’等于['c3', 'c4']
输入示例:
['a1', 'b2', 'c6']
预期输出:
结果应仅包含 C 类操作。
原始
[(['c4', 'c5', 'c7'], 'c1', 'c2'), 'c3', 'c4', 'c6']
所有组合
['c4', 'c5','c7', 'c3', 'c4', 'c6']
['c1', 'c3', 'c4', 'c6']
['c2', 'c3', 'c4', 'c6']
问题:
- 使用元组和列表的合取和析取表示的想法是一个好主意吗?
- 什么是实现此功能的有效方法?
- 是否有可能实现该功能,计算 所有组合,与 itertools? (我不是很熟悉 它们,但我听说它们非常强大)
感谢您的帮助。
【问题讨论】:
标签: python nested logical-operators itertools