我还在学习用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)
这样的事情应该有效:
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,你将不得不做一个递归函数.
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |