使用Python查找所有不同的组合

时间:2017-04-24 18:52:18

标签: python

我想在python中创建一个函数,因为输入会获取一个列表,其中包含未指定数量的字符串,其长度也不是标准的或彼此相同。输入将是这样的:

list = ['1234', '4', '97', ... , '542']

此列表的第一个元素表示可能是数字的第一个数字的所有可能数字,第二个元素表示可能是第二个数字的可能数字,依此类推。作为输出,我希望有一个列表,其中包含可以通过这种方式生成的所有可能的数字。这是一个例子:

input = ['12', '45', '865']
output = ['148', '146', '145', '158', '156', '155',
 '248', '246', '245', '258', '256', '255']

有算法吗?我不是蟒蛇新手,但这个问题让我感到茫然。谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

from itertools import product

input = ['12', '45', '865']

[''.join(prod) for prod in product(*input)]

# ['148', '146', '145', '158', '156', '155', '248', '246',
#  '245', '258', '256', '255']

itertools.product将多个迭代作为参数,并生成其笛卡尔积 当您的iterables(您的字符串)在列表中时,我们使用* input语法来解压缩列表的元素以分隔位置参数。

答案 1 :(得分:1)

使用Python 2.7进行测试

Input = ['12', '45', '865']
out = [[]]

# algo
for liste in Input:
    out = [x + [y] for x in out for y in liste]
    #print out # un comment to see how algo works

index = 0
while index < len(out):
    out[index] = ''.join(out[index])
    index += 1

print out

# prodcues:
# ['148', '146', '145', '158', '156', '155',
#  '248', '246', '245', '258', '256', '255']
# The while loop can be reduced to:
# print [''.join(liste) for liste in out]