首先声明,这种问题的正统解法是使用numpy
下面是不考虑效率的 通用版本,满足 "python自带" 这个条件, 并且可自定义 过滤条件 与 get函数
import json
import ast
def flat(nest,cond_func=lambda r:type(r)==ast.Num,get_func=lambda r:r.n):
cd = json.dumps(nest)
t = ast.parse(cd)
g = ast.walk(t)
arr = list(g)
arr = list(filter(cond_func,arr))
arr = list(map(get_func,arr))
return(arr)
arr = [1, [4], 2, [3, [5, 6]]]
flat(arr)
# [1, 2, 4, 3, 5, 6]
cubic = [
[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
[[255, 0, 0], [0, 255, 0], [0, 0, 255]]
]
flat(cubic)
#[255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 0, 255, 0, 0, 0, 255]
arr = [1, ["a"], 2, ["b", [5, "c"]]]
flat(arr,cond_func=lambda r:type(r)==ast.Str,get_func=lambda r:r.s)
#['a', 'b', 'c']