Python:基于模式创建动态循环

Sha*_*lan 0 python

我还在学习用Python编写代码

我想基于模式生成一个字符串,我知道的唯一方法是使用for循环.

在下面的示例代码中,我为"vcvcv"模式创建了一个循环.c =辅音,v =元音

如何根据我提供给脚本的模式创建动态循环?

例如.如果pattern是"cvcvc",则应该构建循环以生成字符串

帮助预先确定.

谢谢.

#!/bin/env python

vowel="aeiou"
consonant="bcdfghjklmnpqrstvwxyz"

lvowel=list(vowel)
lconsonant=list(consonant)

# pattern for "vcvcv" = ababa
for a in lvowel:
  for b in lconsonant:
    for c in lvowel:
      for d in lconsonant:
            for e in lvowel:
                  myname=a+b+c+d+e
                  print myname

# pattern for "cvcvc" = babab
# how to make the loop dynamic based on pattern ?
Run Code Online (Sandbox Code Playgroud)

Ble*_*der 5

这样的事情应该有效:

import itertools

mapping = {
    'v': 'aeiou',
    'c': 'bcdfghjklmnpqrstvwxyz'
}

pattern = 'vcvcv'

for thing in itertools.product(*map(mapping.get, pattern)):
    print ''.join(thing)
Run Code Online (Sandbox Code Playgroud)

以下是它的工作原理:

  • map(mapping.get, pattern)只是转换'vcv'['aeiou', 'bcdfghjklmnpqrstvwxyz', 'aeiou'].它用相应的字符列表替换每个字母.
  • *map(...) 解包参数列表.
  • itertools.product() 就像一堆嵌套的for循环.
  • ''.join(thing) 将字符列表连接成一个字符串.

如果你想在没有的情况下这样做itertools,你将不得不做一个递归函数.