題目
將一個嵌套的列表展開成一維列表裁蚁,嵌套的層數不固定莫矗。例如毕荐,輸入一個 列表[[[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))]