我一直在到处寻找对itertools.filterfalse的深入了解,但对于我的特定问题,运气并不好
下面是一个场景:我有一组48个对象,我使用itertools.combines从这个集合生成所有9个对象的组合
问题1:如何在不将itertools.combinations对象转换为列表的情况下计算该对象中的项数?itertools文档提供了这方面的公式(大约21亿个组合),但我很想知道是否有任何内置方法可以返回值
生成48-choose-9的这些组合后,我使用itertools.filterfalse函数对它们进行过滤。为了让您了解这个过滤器有多严格,当我对33-choose-7个相似对象的组合执行相同的步骤时,只剩下28个。所以,当我做48-choose-9时,我期望值的数量也同样少
脚本在48-choose-9秒内完成,filterfalse将过滤后的组合返回到一个变量中:
valid_combinations = itertools.filterfalse(
lambda combination: set([action for tile in combination for action in tile])
!= set(total_actions),
all_combinations,
)
valid_combinations
应该是一个简短的列表,但是我的计算机在我尝试时会大声运行几分钟而没有返回任何内容:
valid_combinations = list(valid_combinations)
问题2:如何计算itertools.filterfalse对象中的项数,以确认它确实是一个可管理的数字
问题3:如何在不转换为列表的情况下获取itertools.filterfalse对象有效组合的内容
问题4:是否有更好的方法来过滤这种大小的itertools.combines对象
谢谢你能寄给我的任何见解
目前没有回答
相关问题 更多 >
编程相关推荐