python列表展开

某网站今年笔试题,本质就是把某多维数组变成一维数组并去重。本来要求用JS实现,不过用python更简洁一点,就是对列表进行展开操作,递归就KO了。

首先来个不简洁的:

arr = [1, [1, 2, [2, 3]], [4], [4]]
final=[]
def change(x):
    print "x is:",x
    if isinstance(x, list):
        for l in x:
            print "l is:",l
            change(l)
    else:
        final.append(x)
        print "now final is",final
change(arr)
print final

简洁的:

change = lambda x: [y for l in x for y in change(l)] if type(x) is list else [x]
print change(arr)

至于去重就使用set()就可以了。