我有一个列表,比如说[(1,1,1),(0,0,0),(0,0,0)]
,我想生成q lenght列表中n个元素的所有排列,丢弃等价的元素。我是说:
输入
[1,1,1,0,0,0,0,0,0]
输出
[[(1,1,1),(0,0,0),(0,0,0)], <----- keep this
[(1,1,0),(1,0,0),(0,0,0)], <----- keep this
[(1,1,0),(0,1,0),(0,0,0)], <----- disgard this
[(1,1,0),(0,0,1),(0,0,0)], <----- disgard this
[(1,1,0),(0,0,0),(1,0,0)], <----- keep this
...
...
...
...
[(0,0,0),(1,0,0),(1,0,1)], <----- keep this
[(0,0,0),(1,0,0),(0,1,1)], <----- disgard this
[(0,0,0),(0,1,0),(1,0,1)], <----- disgard this
[(0,0,0),(0,1,0),(0,1,1)], <----- disgard this
[(0,0,0),(0,0,1),(1,0,1)], <----- disgard this
[(0,0,0),(0,0,1),(0,1,1)], <----- disgard this
[(0,0,0),(0,0,0),(1,1,1)]] <----- keep this
这是一个非常简单的任务,有一些嵌套的for cicle,和sum for function,但是我不知道如何使用ipertools实现这一点。 有什么建议吗?你知道吗
谢谢。你知道吗
你可以这样得到排列:
如果只想删除所有重复项,可以使用sumpy:
如果需要其他的东西,尽管问。你知道吗
似乎你想从你的物品列表中列出所有可能的方法来执行3次弃牌,每一次由3张牌组成。我建议您对您的选择做一个更好的映射,例如
[3, 2, 0]
而不是[(0,0,0),(1,0,0),(1,0,1)]
,其中[3, 2, 0]
意味着为每个丢弃开始列表的索引。这种情况可以说明如下:[1,1,1,0,0,0,0,0,0]
,从index=3
开始取出物品[1,1,1,0,0,0]
,从index=2
开始取出物品->[1,1,0]
,从index=0
开始取出物品->[]
解决方案的下一步是考虑所有可能的指数选择是什么样的。很明显:
一般来说,我建议生成所有可能的选项,并手动放弃每个选项:
注:
有些选择可能重复
更新:
如果将这些行添加到脚本中,则可以消除重复的选择:
输出:
相关问题 更多 >
编程相关推荐