从数组中生成排列列表

时间:2015-11-17 10:37:43

标签: python algorithm

这可能很简单,但我对这种编程很陌生,并努力围绕我需要做的事情。

我正在尝试构建要应用于图片的过滤器列表。我可以应用七个过滤器,每个过滤器可以是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这样的东西似乎是正确的,但我仍然无法绕过它。帮助赞赏。

2 个答案:

答案 0 :(得分:3)

据我所知,你所寻找的东西叫做powerset。 以下是此方法的一些实现: Getting the subsets of a set in Python

答案 1 :(得分:2)

您正在以错误的方式使用permutations。看看the documentation

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

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

你想要的是(0, 1) >>> p = product((0, 1), repeat=7) >>> print(len(p)) 128 # [(0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 1), ...] 七次。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC]
RewriteRule ^ https://www.newdomain.org%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.newdomain.org%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]