输出字符串的所有可能变体

时间:2015-12-01 18:00:09

标签: python python-3.x

我有以下代码用于打印由my_list中的字符组成的每个可能的长度为1-4的字符串,但是如果我要扩展此嵌套方法来处理长度为10的输出字符串,结果代码太长了。如何显示长度为10的所有可能变体?

my_list = ['a', 'b', 'c', 'd']

for i in range(len(my_list)):
    print(str(my_list[i]))

for i in range(len(my_list)):
    for o in range(len(my_list)):
        print(str(my_list[i]) + str(my_list[o]))

for i in range(len(my_list)):
    for o in range(len(my_list)):
        for p in range(len(my_list)):
            print(str(my_list[i]) + str(my_list[o]) + str(my_list[p]))

for i in range(len(my_list)):
    for o in range(len(my_list)):
        for p in range(len(my_list)):
            for a in range(len(my_list)):
                print(str(my_list[i]) + str(my_list[o]) + str(my_list[p]) + str(my_list[a]))

(样本输出)

a
b
c
d
aa
ab
ac
ad
ba
bb
bc
bd
[...]

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要itertools.product功能。

import itertools

my_list = ['a', 'b', 'c', 'd']
MAX_LENGTH = 4

for length in range(1,MAX_LENGTH + 1):              
  for x in itertools.product(my_list, repeat=length):
    print(''.join(x))

答案 1 :(得分:0)

只需使用 itertools 包中的permutationscombinations函数即可。我想这会给你你想要的结果。

以下是文档:https://docs.python.org/2/library/itertools.html

我注意到你添加了样本输出。我认为你可以通过以下方式实现这一目标:

from itertools import *
input = "ABCD"
for x in range(1, len(input)+1):
   result = product(input, repeat=x)
   for item in result:
      print "".join(item)