如何简化python中关于迭代组合的代码

2024-09-23 20:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我创建的代码。此代码将列出某个值的所有可能组合,在本例中为“a”“b”“c”“d”。如果我使用这个代码,结果会是这样的:a,aa,ab,ac,ad,aaa,aab,aac,aad,aba,abb,abc,等等。如何简化这个for循环代码,这样我可以输入更多的值而不创建更多的for循环?你知道吗

n = "abcd"

for c in n:
    print(c)
    for c1 in n:
        print(c+c1)
        for c2 in n:
            print(c+c1+c2)
            for c3 in n:
                print(c+c1+c2+c3)

Tags: 代码inforabadacaaprint
3条回答

https://docs.python.org/2/library/itertools.html

Itertools排列和组合就是你想要的。你知道吗

itertools.permutations([1, 2, 3])

要获得340个元素的相同结果,可以使用^{}

product(n, repeat=1)
product(n, repeat=2)
...
product(n, repeat=4)

要打印结果,可以使用以下循环:

from itertools import product
n = "abcd"

for i in range(1, 5):  
    for prod in product(n, repeat=i): 
        print(''.join(prod)) 

为了获得额外的等级,你可以很容易地增加^{}中的5。注意:打印顺序与代码中的略有不同。你知道吗

from itertools import combinations
n = "abcd"
print ([''.join(l) for i in range(len(n)) for l in combinations(n, i+1)])

输出:

['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'bc', 'bd', 'cd', 'abc', 'abd', 'acd', 'bcd', 'abcd']

编辑:

from itertools import combinations_with_replacement

n = "abcd"
comb = []

for i in range(1, len(n)+1):
    comb += list(combinations_with_replacement(n, i))
print([''.join(c) for c in comb])

输出:

['a', 'b', 'c', 'd', 'aa', 'ab', 'ac', 'ad', 'bb', 'bc', 'bd', 'cc', 'cd', 'dd', 'aaa', 'aab', 'aac', 'aad', 'abb', 'abc', 'abd', 'acc', 'acd', 'add', 'bbb', 'bbc', 'bbd', 'bcc', 'bcd', 'bdd', 'ccc', 'ccd', 'cdd', 'ddd', 'aaaa', 'aaab', 'aaac', 'aaad', 'aabb', 'aabc', 'aabd', 'aacc', 'aacd', 'aadd', 'abbb', 'abbc', 'abbd', 'abcc', 'abcd', 'abdd', 'accc', 'accd', 'acdd', 'addd', 'bbbb', 'bbbc', 'bbbd', 'bbcc', 'bbcd', 'bbdd', 'bccc', 'bccd', 'bcdd', 'bddd', 'cccc', 'cccd', 'ccdd', 'cddd', 'dddd']

相关问题 更多 >