我有一个列表,我们可以把它想象成3个罐子和3个球。你知道吗
mylist= [
['HIGH_1', 'MED_1', 'LOW_1'],
['HIGH_2', 'MED_2', 'LOW_2'],
['HIGH_3', 'MED_3', 'LOW_3']
]
我只能从每个瓮中选择一个球。 我想得到1个球,2个球和3个球的所有组合。在一个列表中回答。你知道吗
为了实现这一点,我在每个urn
mylist= [
[None, 'HIGH_1', 'MED_1', 'LOW_1'],
[None, 'HIGH_2', 'MED_2', 'LOW_2'],
[None, 'HIGH_3', 'MED_3', 'LOW_3']
]
下面使用itertools和filter可以得到所需的解决方案。你知道吗
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
加上假无和后过滤并不是最好的方法。你知道吗
有没有办法避免这两个看似多余的步骤?你知道吗
你可以用下面的发电机
可能是我能想到的最能解馋的方法了。你知道吗
仅附加非空项时,不需要
remove()
。您也可以跳过最后一个列表理解,将项目转换为筛选后的列表。你知道吗更新
手动插入
None
并不好。在列表中添加一行:相关问题 更多 >
编程相关推荐