生成器

作者: yuriy0_0 | 来源:发表于2019-03-30 20:23 被阅读0次

    一个非常棒的递归生成器

    #来自《python基础教程》
    def flatten(nested):
        try:
            try:
                nested+''
            except TypeError:
                #print('error1')
                print(nested)
                pass
            else:
                raise TypeError
            for sublist in nested:
                for element in flatten(sublist):
                    yield element
        except TypeError:
           #print('error2')
            print(nested)
            yield nested
    

    利用递归生成器解决八皇后问题

    #冲突检测
    def conflict(state,nextX):
        nextY=len(state)
        for i in range(nextY):
            if abs(state[i]-nextX) in (0,nextY-i):
                return True
        return False
    
    def queens(num=8,state=()):
        for pos in range(num):
            if not conflict(state,pos):
                if len(state)==num-1:
                    yield (pos,)
                else:
                    for result in queens(num,state+(pos,)):
                        yield (pos,)+result
    #for t in list(queens()):print(t)
    """
    (0, 4, 7, 5, 2, 6, 1, 3)
    (0, 5, 7, 2, 6, 3, 1, 4)
    (0, 6, 3, 5, 7, 1, 4, 2)
    (0, 6, 4, 7, 1, 3, 5, 2)
    (1, 3, 5, 7, 2, 0, 6, 4)
    (1, 4, 6, 0, 2, 7, 5, 3)
    (1, 4, 6, 3, 0, 7, 5, 2)
    (1, 5, 0, 6, 3, 7, 2, 4)
    (1, 5, 7, 2, 0, 3, 6, 4)
    (1, 6, 2, 5, 7, 4, 0, 3)
    (1, 6, 4, 7, 0, 3, 5, 2)
    (1, 7, 5, 0, 2, 4, 6, 3)
    (2, 0, 6, 4, 7, 1, 3, 5)
    (2, 4, 1, 7, 0, 6, 3, 5)
    (2, 4, 1, 7, 5, 3, 6, 0)
    (2, 4, 6, 0, 3, 1, 7, 5)
    (2, 4, 7, 3, 0, 6, 1, 5)
    (2, 5, 1, 4, 7, 0, 6, 3)
    (2, 5, 1, 6, 0, 3, 7, 4)
    (2, 5, 1, 6, 4, 0, 7, 3)
    (2, 5, 3, 0, 7, 4, 6, 1)
    (2, 5, 3, 1, 7, 4, 6, 0)
    (2, 5, 7, 0, 3, 6, 4, 1)
    (2, 5, 7, 0, 4, 6, 1, 3)
    (2, 5, 7, 1, 3, 0, 6, 4)
    (2, 6, 1, 7, 4, 0, 3, 5)
    (2, 6, 1, 7, 5, 3, 0, 4)
    (2, 7, 3, 6, 0, 5, 1, 4)
    (3, 0, 4, 7, 1, 6, 2, 5)
    (3, 0, 4, 7, 5, 2, 6, 1)
    (3, 1, 4, 7, 5, 0, 2, 6)
    (3, 1, 6, 2, 5, 7, 0, 4)
    (3, 1, 6, 2, 5, 7, 4, 0)
    (3, 1, 6, 4, 0, 7, 5, 2)
    (3, 1, 7, 4, 6, 0, 2, 5)
    (3, 1, 7, 5, 0, 2, 4, 6)
    (3, 5, 0, 4, 1, 7, 2, 6)
    (3, 5, 7, 1, 6, 0, 2, 4)
    (3, 5, 7, 2, 0, 6, 4, 1)
    (3, 6, 0, 7, 4, 1, 5, 2)
    (3, 6, 2, 7, 1, 4, 0, 5)
    (3, 6, 4, 1, 5, 0, 2, 7)
    (3, 6, 4, 2, 0, 5, 7, 1)
    (3, 7, 0, 2, 5, 1, 6, 4)
    (3, 7, 0, 4, 6, 1, 5, 2)
    (3, 7, 4, 2, 0, 6, 1, 5)
    (4, 0, 3, 5, 7, 1, 6, 2)
    (4, 0, 7, 3, 1, 6, 2, 5)
    (4, 0, 7, 5, 2, 6, 1, 3)
    (4, 1, 3, 5, 7, 2, 0, 6)
    (4, 1, 3, 6, 2, 7, 5, 0)
    (4, 1, 5, 0, 6, 3, 7, 2)
    (4, 1, 7, 0, 3, 6, 2, 5)
    (4, 2, 0, 5, 7, 1, 3, 6)
    (4, 2, 0, 6, 1, 7, 5, 3)
    (4, 2, 7, 3, 6, 0, 5, 1)
    (4, 6, 0, 2, 7, 5, 3, 1)
    (4, 6, 0, 3, 1, 7, 5, 2)
    (4, 6, 1, 3, 7, 0, 2, 5)
    (4, 6, 1, 5, 2, 0, 3, 7)
    (4, 6, 1, 5, 2, 0, 7, 3)
    (4, 6, 3, 0, 2, 7, 5, 1)
    (4, 7, 3, 0, 2, 5, 1, 6)
    (4, 7, 3, 0, 6, 1, 5, 2)
    (5, 0, 4, 1, 7, 2, 6, 3)
    (5, 1, 6, 0, 2, 4, 7, 3)
    (5, 1, 6, 0, 3, 7, 4, 2)
    (5, 2, 0, 6, 4, 7, 1, 3)
    (5, 2, 0, 7, 3, 1, 6, 4)
    (5, 2, 0, 7, 4, 1, 3, 6)
    (5, 2, 4, 6, 0, 3, 1, 7)
    (5, 2, 4, 7, 0, 3, 1, 6)
    (5, 2, 6, 1, 3, 7, 0, 4)
    (5, 2, 6, 1, 7, 4, 0, 3)
    (5, 2, 6, 3, 0, 7, 1, 4)
    (5, 3, 0, 4, 7, 1, 6, 2)
    (5, 3, 1, 7, 4, 6, 0, 2)
    (5, 3, 6, 0, 2, 4, 1, 7)
    (5, 3, 6, 0, 7, 1, 4, 2)
    (5, 7, 1, 3, 0, 6, 4, 2)
    (6, 0, 2, 7, 5, 3, 1, 4)
    (6, 1, 3, 0, 7, 4, 2, 5)
    (6, 1, 5, 2, 0, 3, 7, 4)
    (6, 2, 0, 5, 7, 4, 1, 3)
    (6, 2, 7, 1, 4, 0, 5, 3)
    (6, 3, 1, 4, 7, 0, 2, 5)
    (6, 3, 1, 7, 5, 0, 2, 4)
    (6, 4, 2, 0, 5, 7, 1, 3)
    (7, 1, 3, 0, 6, 4, 2, 5)
    (7, 1, 4, 2, 0, 6, 3, 5)
    (7, 2, 0, 5, 1, 4, 6, 3)
    (7, 3, 0, 2, 5, 1, 6, 4)
    len(list(queens()))
    92
    """
    

    相关文章

      网友评论

          本文标题:生成器

          本文链接:https://www.haomeiwen.com/subject/gvwsbqtx.html