我有一个列表展平算法:
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/