python - 优化算法以处理元组、集合和字典

标签 python algorithm flatten

我有一个列表展平算法:

def flatten(s):
    if not s:
        return s
    if isinstance(s[0], (list, set, tuple)):
        return flatten(s[0]) + flatten(s[1:])
    return s[:1] + flatten(s[1:])

但如果您组合两种不同数据类型,它就不起作用了。例如,元组中的列表。有没有办法做到这一点?也可以将字典扁平化吗?值,而不是键。

最佳答案

通常建议使用 itertools -> chain 或标准库,但对于任意嵌套的容器:

xlen = len(x)
result = []    

def flatten(x, i, xlen, result):
  if i >= xlen:
    return
  if not isinstance(x[i], (list, set, tuple)):
    result.append(x[i])
  else:
    flatten(list(x[i]), 0, len(x[i]), result)
  flatten(x, i+1, xlen, result)

您可以为空容器等添加边角情况。

关于python - 优化算法以处理元组、集合和字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58183748/

相关文章:

python - flask_admin 改变 inline_models 行为

php - 为什么我的投资预测 PHP 程序会出现微小的计算差异? (循环和条件问题。)

python - 如何展平 pandas 数据框多列中的字典列表

R (purrr) 将命名列表的列表展平以列出并保留名称

c# - 展平父/子对象链,沿途合并值

python - 加快 numpy 过滤速度

python - 如何用 pygtk 显示 MessageBox?

python - 无法通过 PIP 安装 JQ

C++回文检查解决方案被一个测试用例触发

algorithm - 计算子图实例