Szukanie lidera w liśćie

0

Co tu jest nie tak, że mi zwraca po kilka razy to samo? Najpierw, że nie ma lidera, a potem poprawny wynik.

def szukajlidera(tab):
  lider = tab[0]
  dopary = 1
  n = len(tab)

  print('Lista ma', n, 'elementów')

  for i in range(n):
    if dopary > 0:
      if tab[i] == lider:
         dopary = dopary+1
      else:
          dopary = dopary-1
    else:
      dopary = dopary+1
      lider = tab[i]
  

    if dopary == 0:
      print('Nie ma lidera')
      

    liczlidera = 0

    for i in range(n):
      if tab[i]==lider:
        liczlidera=liczlidera+1
    
      if liczlidera > n/2:
        print('Lider to', lider) 
       

  
A=[1, 2, 3, 4, 2, 2, 2]
B=[1, 2, 2, 3, 3, 3, 3, 2, 3]
C=[10, 30, 40, 30, 20, 10, 10]

print('A, lider to 2')
szukajlidera(A)

print('B, lider to 3')
szukajlidera(B)

print('C, lider nie ma')
szukajlidera(C)
  
0

Można to łatwiej zrobić za pomocą collections:

import collections


def find_leader(xs):
    if not xs:
        return None
    obj = collections.Counter(xs).most_common()[0]
    if obj[1] > len(xs) / 2:
        return obj[0]
    return None


def main():
    print(find_leader([1, 1, 2, 3, 1, 2, 1]))  # -> 1
    print(find_leader([]))  # -> None
    print(find_leader([1]))  # -> 1
    print(find_leader([1, 2, 2, 3]))  # -> None


if __name__ == '__main__':
    main()

1 użytkowników online, w tym zalogowanych: 0, gości: 1