How could one find the length of longest row of same elements in a list. For example if i have a list

list = [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]

and i need to find the the length of longest row of 0's. In this case it would be 7, cause there are 7 zeros starting with list[6] up to list[12]

ok i managed it myself:

for i in list:
    if(list[i] == 1):
        x += 1
    if(list[i] == 0):
        if(size < x):
            size = x
        x = 0

Hint, don't use list as a variable name. It is a Python function name. Use something like mylist.

Did you test out your approach? There are a few things missing.

Edited 6 Years Ago by vegaseat: n/a

well i just found out that if the longest row is in the end of the list it doesn't count it. i'm thinking of adding another "if" after "for" finishes its work. maybe there's some better way to do it but i didn't fid it out yet.

ok i modified it a bit. now it's working like it is supposed to.

size = 0
x = 0
         for element in blist:
            if(element == 0):
               x += 1
               if(size < x):
                  size= x
            else:
               x = 0

FWIW, a more generic solution using a list to keep track of the maximum's value and the number of times it occurs.

def find_the_max(blist):
    ## a list containing the value and the number of times it appears
    max_group = [blist[0], 0]
    this_group = [blist[0], 0]
    for el in blist:
        if el == this_group[0] :
            this_group[1] += 1
        else:
            ## test for a new max
            if this_group[1] > max_group[1]:
                max_group = this_group[:]
            this_group = [el, 1]

    ## allow for the final group to be the longest
    if this_group[1] > max_group[1]:
        max_group = this_group[:]
    print max_group


blist = [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]
find_the_max(blist)
clist = [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
find_the_max(clist)

Edited 6 Years Ago by woooee: n/a

This question has already been answered. Start a new discussion instead.