【问题标题】:Generate combinations from an input in python从python中的输入生成组合
【发布时间】:2015-10-11 12:35:25
【问题描述】:

我不确定如何在 Python 中解决这个问题。在搜索这个时,我遇到了 itertools,但我不确定在这种情况下如何应用它。

我要做的是创建一个脚本,该脚本可以接受包含查询标记(如 AB?D?)和一组选项(ABC、DEF)的字符串输入,以输出所有可能的组合,如下所示。

ABADD,    ABADE,    ABADF
ABBDD,    ABBDE,    ABBDF
ABCDD,    ABCDE,    ABCDF

在搜索中,我还找到了this,但我不完全确定如何围绕我的输入实现这一点。

将输入字符串分解为问号周围的多个子字符串是否最有效(因此上面的示例变为 AB + ? + D + ?)。像列表这样的东西是否适合这个?

提前感谢您提供的任何帮助。

【问题讨论】:

  • ABCDEF是否固定在对应的?s的位置?此外,即使您不确定该方法,您也应该分享您尝试过的代码。
  • 我认为这是一个使用 for 循环的简单字符串替换问题,因此我可以编写必要的代码,但您应该等待一段时间。 tutorialspoint.com/python/string_replace.htm

标签: python generator combinations


【解决方案1】:

您可以使用itertools.product 获取组合并使用string.format 将它们合并到模板字符串中。 (首先,将?替换为{}得到format string syntax。)

def combine(template, options):
    template = template.replace('?', '{}')
    for opts in itertools.product(*options):
        yield template.format(*opts)

例子:

>>> list(combine('AB?D?', ['ABC', 'DEF']))
['ABADD', 'ABADE', 'ABADF', 'ABBDD', 'ABBDE', 'ABBDF', 'ABCDD', 'ABCDE', 'ABCDF']

【讨论】:

  • 哇好紧凑的形式,仍然可读。 @534,如果不清楚,'{}' 会将占位符放在通用字符串中,由string.format() 行填充。
猜你喜欢
  • 2011-03-11
  • 2015-05-03
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2015-03-20
相关资源
最近更新 更多