A have a real problem (and a headache) with an assignment...
I'm in an introductory programming class, and I have to write a function that, given a list, will return the "maximum" depth it goes to... For example: [1,2,3] will return 1, [1,[2,3]] will return 2...
I've written this piece of code (it's the best I could get T_T)
def flat(l):
count=0
for item in l:
if isinstance(item,list):
count+= flat(item)
return count+1
However, It obviously doens't work like it should, because if there are lists that do not count for the maximum deepness, it still raises the counter...
For example: when I use the function with [1,2,[3,4],5,[6],7] it should return 2, but it returns 3...
Any ideas or help would be greatly appreciated ^^ thanks a lot!! I've been strugling with this for weeks now...
Abusive way: Say your list is called
mylist
mybrackets = map(lambda x: 1 if x=='[' else -1, [x for x in str(mylist) if x=='[' or x==']'])
maxdepth = max([sum(mybrackets[:i+1]) for i in range(len(mybrackets))])
This converts your list to a list of opening and closing brackets, then finds the largest number of opening brackets that occur before the corresponding closing bracket occurs.
Here is one way to write the function
I think the idea you are missing is to use
max()
A way that does not need any additional modules and has the same speed, no mater what depth:
Basically, what this does is convert the list to a string using
repr()
. Then for every character in this string equal to "(" or "[" it increases the variablecount
. for the closing brackets it decreasescount
. It then returns the maximum thatcount
has reached.I extended the hammar's answer for every iterable (strings disabled by default):