繁体   English   中英

从数组中产生排列的列表

[英]Producing a list of permutations from an array

这可能很简单,但是对于这种编程我还是陌生的,我一直在努力把自己的头围在我需要做的事情上。

我正在尝试建立要应用于图像的过滤器列表。 我有七个可以应用的过滤器,每个过滤器可以为01 (打开或关闭)。 过滤器为:

filters = [
    'Exposure',
    'Noise',
    'Pressure',
    'XQ Mix',
    'Invert',
    'Desaturate',
    'Equalise'
]

我想要产生的是这些过滤器在其状态下的所有可能排列。 应该有128个可能的排列(2 ^ 7),但是当我运行以下代码时,我得到5080个排列:

perms = permutations(filters)
perm_count = 0
for p in perms:
    print(p)
    perm_count = perm_count + 1

print str(perm_count) + ' total permutations'

我可能使用了错误的方法-所有要做的就是改组过滤器的序列,我不在乎。

我尝试将过滤器列表更新为每个过滤器都有两个项目,例如。 ['Exposure0', 'Exposure1']等,但是对此运行combinations(filters, 7)会给我重复的值(例如,同一列表中的开和关状态)。

我在这里苦苦挣扎–有人可以朝着正确的方向推动我迈向这种事情吗? 在文档中查看,类似product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy看起来很正确,但我仍然无法解决。 帮助表示赞赏。

据我了解,您正在寻找的东西称为电源集。 这是此方法的一些实现: 在Python中获取集合的子集

您使用错误的permutations方式。 查看文档

>>> permutations('ABCD', 2)
AB AC AD BA BC BD CA CB CD DA DB DC

您只是混合您的filters值并创建所有可能性,即7! = 5040。

您想要的是(0, 1)七次product

>>> p = product((0, 1), repeat=7)
>>> print(len(p))
128
# [(0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 1), ...]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM