题目
将一个嵌套的列表展开成一维列表,嵌套的层数不固定。例如,输入一个 列表[[[2]], [4, [5, 6, [6], 6, 6, 6], 7]]
,展开后成为[2, 4, 5, 6, 6, 6, 6, 6, 7]
。
我的解法
这是借鉴了《python基础教程》中的对于list展开的方法,利用递归算法。
def flat_list(array):
return list(flaten(array))
def flaten(array):
try:
for sublist in array:
for element in flaten(sublist): #此处进行递归处理
yield element
except TypeError:
yield array
if __name__ == '__main__':
assert flat_list([1, 2, 3]) == [1, 2, 3], "First"
assert flat_list([1, [2, 2, 2], 4]) == [1, 2, 2, 2, 4], "Second"
assert flat_list([[[2]], [4, [5, 6, [6], 6, 6, 6], 7]]) == [2, 4, 5, 6, 6, 6, 6, 6, 7], "Third"
assert flat_list([-1, [1, [-2], 1], -1]) == [-1, 1, -2, 1, -1], "Four"
print('Done! Check it')
别人的代码
这个代码比较有意思,将待处理的列表转换为字符串,然后用正则表达式去替换其中的列表符号。但是可能出现的问题是,当[
和]
本身是列表的元素时会出现错误。
def flat_list(array):
import re
return [int(i) for i in re.findall(r'[-]?\d+', str(array))]