我还在学习用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 ?
如果您刚开始编程,并且希望看到比上面列出的itertools更通用的解决方案,那么递归是您的最佳选择,允许您任意嵌套循环。在
这里有一个稍微复杂的地方,您可以使用Python generators来实现,或者使用更简单(但更混乱)的构造。后者的一个例子如下所示。在
有点像
这是几种可能的实现之一,也是我能想象的最天真的两种实现之一。在
下面给出了前n个排列的更详细但更易于定制的版本
我同意这是更多的工作!在
这样的方法应该有效:
大致如下:
map(mapping.get, pattern)
只是将'vcv'
转换为['aeiou', 'bcdfghjklmnpqrstvwxyz', 'aeiou']
。它用相应的字符列表替换每个字母。在*map(...)
解压缩参数列表。在itertools.product()
就像一堆嵌套的for循环。在''.join(thing)
将字符列表联接到单个字符串中。在如果您想在不使用
itertools
的情况下执行此操作,则必须创建一个递归函数。在相关问题 更多 >
编程相关推荐