22. 平面列表
題目
給定一個列表,該列表中的每個要素要么是個列表,要么是整數。將其變成一個只包含整數的簡單列表。
?注意事項
如果給定的列表中的要素本身也是一個列表,那么它也可以包含列表。
您在真實的面試中是否遇到過這個題?? Yes 樣例給定?[1,2,[1,2]],返回?[1,2,1,2]。
給定?[4,[3,[2,[1]]]],返回?[4,3,2,1]。
挑戰?請用非遞歸方法嘗試解答這道題。
題解
非遞歸的做法,stack作為一個容器,來保存每一層的數據
當我們遇到一個元素是列表,我們就把當前列表存起來,把這個元素當作新列表,再枚舉處理,再繼續上面的操作,
直到某個只有數字的元素,則開始回溯,把stack的列表一個一個pop出來繼續處理,直到stack全部處理結束。
這題還有注意的是進來的可能只是一個數字,所以我先[,]下,反正后面會自己解開。還有就是有一些空集合,導致我代碼提早跳出,代碼還能寫更漂亮才對。
?
def flatten(nestedList):idx = 0lst = []stack = []curList = [nestedList,]while 1:if type(curList[idx]) == list:stack.append([curList, idx])curList = curList[idx]idx = -1else:lst.append(curList[idx])idx += 1if idx == len(curList):while 1:if len(stack) == 0:return lstcurList, idx = stack.pop()idx += 1if idx < len(curList):break?
轉載于:https://www.cnblogs.com/usp10/p/8619043.html
總結
- 上一篇: Django项目:CRM(客户关系管理系
- 下一篇: $GLOBALS -- 变量