python - 有没有一种实用的方法可以做到这一点?

标签 python sequences

def flattenList(toFlatten):
 final=[]
 for el in toFlatten:
  if isinstance(el, list):
   final.extend(flattenList(el))
  else:
   final.append(el)
 return final

当我不知道列表的嵌套深度时,这是我能想到的唯一方法。

最佳答案

  1. 您应该避免在 Python 中进行类型检查。在这种情况下,这意味着避免按类型区分的任意嵌套结构。您可以构建自己的节点类型,您可以通过类型检查以外的方法遍历这些节点类型,例如查看特定属性。

  2. 要展平一个级别或恰好 n 个级别,请查看 itertools.chain.from_iterable

  3. 我不知道您所说的“功能性”是什么意思。这段代码非常实用:它使用递归(不值得赞扬!)并且它不会改变它的参数。 (严格来说,它确实使用可变状态来构建列表,但这正是您在 Python 中的做法。

  4. 我想还有一个功能属性是惰性求值。你可以这样实现这个

    def flatten(toFlatten):
        for item in toFlatten:
            if isinstance(item, list): # Ewww, typchecking
                for subitem in flatten(item): # they are considering adding 
                    yield subitem             # "yield from" to the  language
                                              # to give this pattern syntax
            else:
                yield item
    
  5. 递归在 Python 中非常有限(至少在其所有主要实现中是这样),通常应避免使用任意深度。很有可能重写这个(以及所有递归代码)以使用迭代,这将使它更具可扩展性(并且功能更少,这在 Python 中是一件好事,Python 并不特别适合 FP。)

关于python - 有没有一种实用的方法可以做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2471413/

相关文章:

php - 解密系列 - 找到连续整数序列的数量,使得它们的总和为零

sql-server - 重置序列

python - 提高魔杖转换的质量

python - 获取尚未在 Python 中返回的(OS)命令的输出

python - 捕获异常并将其输出到 django 的消息系统

api - 以编程方式访问在线整数序列百科全书

c++ - 处理 OpenCV 中的序列?

performance - 快速生成 "triangle sequence": avoiding mispredictions

python - 无法导入守护程序类

python - 在 Python 列表理解中使用带有 if/elif 语句的 'for' 循环