繁体   English   中英

扁平化Python中的元组列表

[英]Flatten list of Tuples in Python

我正在使用递归函数通过迷宫创建流路。 该函数返回正确的路径元组(行,列),但是我需要以元组列表的形式使用它。 例如,我需要创建此表单

[(0,0),(1,1),(2,2),(3,3),(4,3)]

但是该函数返回以下内容:

[(0, 0), [(1, 1), [(2, 2), [(3, 3), (4, 3)]]]]

这是函数:

def FlowPathAt(fdir,row,col):
    lItem = FlowOut(fdir,row,col)
    if not lItem:
        return (row,col)
    else:
        r,c = lItem
        return [(row,col) ,  FlowPathAt(fdir,r,c)]

FlowOut(fdir,row,col)是一个函数,该函数返回从(row,col)开始的下一个单元格地址

有什么办法可以在构建过程中扁平化此列表?

相似: 如何将元组列表展平为pythonic列表

尝试这个:

def FlowPathAt(fdir,row,col):
    lItem = FlowOut(fdir,row,col)
    if not lItem:
        return [(row,col)] # More convenient base case
    else:
        r,c = lItem
        return [(row,col)] + FlowPathAt(fdir,r,c) # Append list to list instead of nesting

(这也总是返回一个元组列表,这似乎比有时返回列表有时返回单个元组更好。但是,如果这不可接受,则需要进行一些后处理。)

对于列表增长,这需要大量内存管理,为什么不将其重构为生成器函数:

def FlowPathAt(fdir, row, col):
    while True:
        yield row, col
        lItem = FlowOut(fdir, row, col)
        if lItem is None: break
        row, col = lItem

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM