我有一个列表的列表,我们可以认为它是3个球的3个球。itertools和从分区集合中选择
mylist= [
['HIGH_1', 'MED_1', 'LOW_1'],
['HIGH_2', 'MED_2', 'LOW_2'],
['HIGH_3', 'MED_3', 'LOW_3']
]
我只允许从每个瓮中选择一个球。 我想获得1球,2球和3球的所有组合。在列表中回答。
为了实现这一点,我在每个瓮
mylist= [
[None, 'HIGH_1', 'MED_1', 'LOW_1'],
[None, 'HIGH_2', 'MED_2', 'LOW_2'],
[None, 'HIGH_3', 'MED_3', 'LOW_3']
]
放置一个假元件(无)现在以下使用itertools的和过滤器获取我所需的解决方案。
combos = []
for l in itertools.product(*mylist):
combos.append(filter(lambda a: a is not None, l))
combos.remove(()) # remove the empty element
print [list(elem) for elem in combos]
[['HIGH_3'], ['MED_3'], ['LOW_3'], ... , ['MED_2', 'HIGH_3'], ['MED_2', 'MED_3'], ['MED_1', 'HIGH_3'], ..., ['LOW_1', 'LOW_2', 'MED_3'], ['LOW_1', 'LOW_2', 'LOW_3']]
其中产生63个元素。
9(单元素)+ 27(两个元素)+ 27(三要素)= 63
添加在假无和后过滤不觉得自己做到这一点的最好办法。
有没有办法避免这两个看似多余的步骤?
那么你写了什么,究竟是什么问题呢? – jonrsharpe
你有*“更好”*的标准吗? – jonrsharpe