DNb*_*ter 7 python combinations permutation set
我知道我可以使用itertools抽出组合,并定义组合组的大小,如下所示:
import itertools
print list(itertools.combinations(['V','M','T','O','Q','K','D','R'], 4))
Run Code Online (Sandbox Code Playgroud)
这个输出就像一个元组列表,在这种情况下长度为4.
从这里,我想要做的是强制执行2个参数 - 1)排除包含某些对的任何组合/元组 - 例如V和M,或者Q和K. 2)强制每个元组只包含1个实例一封信.我相信itertools已经在做#2了.
应该保留的只是那些不包含任何这些预定"假"对的元组.因此,如果我排除了包含V和M的组,则该组('V','M','Q','D')将无效,但是('V','R','Q','D')有效.
这对我来说最好的方法是什么?
我会用一组过滤:
import itertools
c = itertools.combinations(['V','M','T','O','Q','K','D','R'], 4)
st = {"V","M"}
print([co for co in c if not st.issubset(co)])
Run Code Online (Sandbox Code Playgroud)
如果你想过滤两个:
st1 = {"V","M"}
st2 = {"Q","K"}
print([co for co in c if not st1.issubset(co) and not st2.issubset(co)])
Run Code Online (Sandbox Code Playgroud)
如果您有两个以上,那么使用可能会更好any:
sts = [{"V","M"},{"V","R"},{"T","O"}]
print([co for co in c if not any(st.issubset(co) for st in sts)])
Run Code Online (Sandbox Code Playgroud)
除非你推出自己的组合逻辑,否则你无法避免创建所有组合和过滤,即使你自己推出自己的组合逻辑,在纯Python中执行它可能会更慢,因为你有一个大数据集
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |