如何获得每个字符串的变化以及每个位置的可能性列表

时间:2020-02-06 05:20:41

标签: python string list

假设我有一个名为master_list的列表,它具有以下属性:

  1. master_list内的每个列表都包含单个数字正整数的字符串
  2. master_list中的每个列表的长度为2到5
  3. master_list的长度为1到8

我想做的是使用每个位置的可能性列表返回一个字符串变体列表。

以下是master_list的示例,输出结果如下:

master_list = [['3', '2', '6'], ['6', '5', '3', '9'], ['9', '8', '6']]

#  In this case the output would contain 3*4*3 = 36 elements 

output = ["339","366","399","658","636","258","268","669","668","266","369","398",
           "256","296","259","368","638","396","238","356","659","639","666","359",
           "336","299","338","696","269","358","656","698","699","298","236","239"]

2 个答案:

答案 0 :(得分:3)

尝试使用嵌套的for循环遍历每个列表,然后我意识到我需要使用递归,因为列表的数量是可变的。但是我坚持如何做到这一点。嵌套循环为我提供了上面的输出,但是对于这种情况,其本质上是硬编码的。

尝试一下(它使用itertools.product):

import itertools

li = [['3', '2', '6'], ['6', '5', '3', '9'], ['9', '8', '6']]
result = [''.join(i) for i in itertools.product(*li)]
print(result)

输出:

['369', '368', '366', '359', '358', '356', '339', '338', '336', '399', '398', '396', '269', '268', '266', '259', '258', '256', '239', '238', '236', '299', '298', '296', '669', '668', '666', '659', '658', '656', '639', '638', '636', '699', '698', '696']

如果要将每个元素转换为int

result = [int(''.join(i)) for i in itertools.product(*li)]

答案 1 :(得分:1)

itertools产品将为您提供元组中的所有组合 如本例所示 All combinations of a list of lists 那么您可以将每个元组合并为一个字符串,或者创建一个数字并转换为字符串