我想寫一個像zip一樣的函數。我不擅長解釋我的意思,所以我只會顯示我想要做的事情的「代碼」。Python深拉鍊
a = [1,2,3,[4,5]]
b = a[:]
zip(a, b) == [(1,1), (2,2), (3,3), ([4,5],[4,5])]
myzip(a, b) == [(1,1), (2,2), (3,3), [(4,4), (5,5)]]
我很困難,這甚至不好笑。我試圖用遞歸lambdas以簡單的函數式編寫它,以使我的代碼更漂亮。我想myzip喜歡這樣,因爲我想用它的輸出與其它功能我寫了一個函數映射到一棵樹
def tree_map(func, tree):
return map(lambda x: func(x) if not isinstance(x, list) else tree_map(func, x),
tree)
我一直在試圖做類似這樣的帶拉鍊的東西,但我似乎無法把我的頭包裹起來。有沒有人有任何想法,我怎麼可以寫myzip?
編輯:看看tree_map!是不是很漂亮!我至少這麼認爲,但我的母語是Scheme:P ,同時我也希望myzip能夠儘可能深入。基本上,我希望myzip保留通過它的樹的結構。此外,myzip只能處理相同形狀的樹木。
「我試圖用遞歸lambdas以簡單的函數式方式編寫它,以使我的代碼更漂亮。」這就像......好吧,不,我不會試圖想出一些喜劇性的比喻。但是lambda表達式的遞歸不太可能讓你的代碼更漂亮。 – DSM
只是2級的好,還是必須是無限的? – jterrace
你有沒有想過檢查['itertools'](http://docs.python.org/library/itertools.html#itertools.izip)?有一些Python僞代碼呈現可以激發你的邏輯...... –