Самый повторяющийся элемент в списке - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь создать функцию, которая находит наиболее повторяющийся элемент в списке. Я подумал перебрать список, проверить количество каждого элемента и сравнить их (используя 2 переменные numnum и numnum2)

Что-то не так, всегда печатается 6.

l1 = [1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 1, 3, 6, 6, 3, 4, 2, 6]

print(l1)


def mostrepeating(list1=None):
    if list1 is None:
        print('No list was received in the function.')
    else:
        numnum, numnum2, result = 0, 0, 0
        for num in list1:
            if list1.index(num) == 0:
                numnum = list1.count(num)
                result = num
            else:
                numnum2 = list1.count(num)
                if numnum2 > numnum:
                    result = num
                    numnum = numnum2
        print(result)


mostrepeating(l1)

Ответы [ 4 ]

1 голос
/ 08 марта 2020

Проблема с if list1.index(num) == 0, сбрасывает results в 1, теряя предыдущий счет. Удалите его и установите result на первый элемент в списке. Чтобы сократить количество итераций, вы также должны выполнить итерацию по set из чисел

def mostrepeating(list1=None):
    if list1 is None:
        print('No list was received in the function.')
    else:
        numnum, numnum2, result = 0, 0, 0
        s = set(l1)
        result = list1[0]
        for num in s:
            numnum2 = list1.count(num)
            if numnum2 > numnum:
                result = num
                numnum = numnum2
        print(result)
0 голосов
/ 08 марта 2020

Вы можете использовать функцию, которая подсчитывает все числа в списке и помещает их в число.

Ввод:

count_elements ([1, 1, 1, 1, 3, 2, 5, 7, 8, 1])

Выход:

{1: 5, 2: 1, 3: 1, 5: 1, 7: 1, 8: 1}

Код:

def add_element_to_dict(dictin, key):
    dictout = dictin
    if key in dictout.keys():
        dictout[key] = dictout[key] + 1
    else:
        dictout[key] = 1
    return dictout

def count_elements(list1=None):
    if list1 == None:
        print("No list specified")
        return
    else:
        numbersdict = {}
        for ele in list1:
            numbersdict = add_element_to_dict(numbersdict, ele)
    return numbersdict
0 голосов
/ 08 марта 2020

Вы также можете использовать Класс счетчика из модуля коллекций.

>>> l1 = [1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 1, 3, 6, 6, 3, 4, 2, 6]
>>> from collections import Counter
>>> Counter(l1).most_common(1)[0][0]
7
0 голосов
/ 08 марта 2020
l1 = [1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 1, 3, 6, 6, 3, 4, 2, 6,6,6,6,6,6,6,6,6,6,6,6,6]

appear_dict = {}
for n in l1:
    appear_dict[n] = appear_dict.get(n, 0) + 1

most_repeat = l1[0]
for key, val in appear_dict.items():
    most_repeat = key if val > most_repeat else most_repeat

print(most_repeat)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...