社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

N嵌套for循环python

dimos geo • 5 年前 • 1259 次点击  

有没有什么方法像反序函数一样具有动态循环数? ['a','b','c','d'] 和 莱特迪克特是一本字典 {'a':['b','c'],'b':['a'],'c':['d'],'d':['b','c','d'] 我的代码是n=13:

for x in letters:
    for k1 in letterdict[x]:
        for k2 in letterdict[k1]:
            for k3 in letterdict[k2]:
                for k4 in letterdict[k3]:
                    for k5 in letterdict[k4]:
                        for k6 in letterdict[k5]:
                            for k7 in letterdict[k6]:
                                for k8 in letterdict[k7]:
                                    for k9 in letterdict[k8]:
                                        for k10 in letterdict[k9]:
                                            for k11 in letterdict[k10]:
                                                for k12 in letterdict[k11]:
                                                    for k13 in letterdict[k12]:
                                                        word=""
                                                        word=x+k1+k2+k3+k4+k5+k6+k7+k8+k9+k10+k11+k12+k13
                                                        print(word)

这样地:

n=3时

for x in letters:
    for k1 in letterdict[x]:
        for k2 in letterdict[k1]:
            for k3 in letterdict[k2]:
                word=""
                word=x+k1+k2+k3
                print(word)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54411
 
1259 次点击  
文章 [ 1 ]  |  最新文章 5 年前
kaya3
Reply   •   1 楼
kaya3    5 年前

通常,当您发现自己需要无限多的嵌套循环时,应该编写一个递归函数。下面是一个作为生成器函数的实现:

def generate_strings(letters, transitions, k):
    def helper(s):
        if len(s) == k:
            yield s
        elif len(s) < k:
            for letter in transitions[s[-1]]:
                yield from helper(s + letter)
    for letter in letters:
        yield from helper(letter)

示例:请注意,不必使用字符列表,因为字符串也是一个字符序列。

>>> letters = 'abcd'
>>> transitions = {'a': 'bc', 'b': 'a', 'c': 'd', 'd': 'bcd'}
>>> for s in generate_strings(letters, transitions, 4):
...     print(s)
... 
abab
abac
acdb
acdc
acdd
baba
bacd
cdba
cdcd
cddb
cddc
cddd
dbab
dbac
dcdb
dcdc
dcdd
ddba
ddcd
dddb
dddc
dddd