car = lambda lst: lst[0] cdr = lambda lst: lst[1:] ''' depth: returns the maximum nesting level of a list Given: ls, a list Result: an integer ''' def depth(ls): if not ls: return 0 elif isinstance(car(ls),list): return max(depth(car(ls))+1,depth(cdr(ls))) else: return max(1,depth(cdr(ls))) ''' strip: returns the list elements of a list Given: ls, a list Result: ls, the modified list ''' def strip(ls, top): if top: for item in top: if item in ls: ls.remove(item) elif cdr(ls): ls = car(ls) + strip(cdr(ls), top) # case like [[1], ...] else: ls = car(ls) # case like [[1]] return ls ''' level: returns the top level elements of a list Given: ls, a list Result: a new list ''' def level(ls): if not ls: return [] elif not isinstance(car(ls),list): return [car(ls)] + level(cdr(ls)) else: return level(cdr(ls)) ''' levelize: returns a list of lists, each list is contains the items of a level Given: ls, a list Result: a new list ''' def levelize(ls): result = [] a = list(ls) for i in range(2*depth(ls)): if not i%2: result.append(level(a)) a = strip(a, level(a)) return result ''' level: returns the top level elements of a list Given: ls, a list Result: a new list ''' def level(ls): if not ls: return [] elif not isinstance(car(ls),list): return [car(ls)] + level(cdr(ls)) else: return level(cdr(ls)) ''' levelize: returns a list of lists, each list is contains the items of a level Given: ls, a list Result: a new list ''' def levelize(ls): result = [] a = list(ls) for i in range(2*depth(ls)): if not i%2: result.append(level(a)) a = strip(a, level(a)) return result print levelize([1,[2,6,[3,5,[4,[]],[]],[7,[]]]])
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question