2015-11-19 4 views
0

Для моего курса программирования мне нужно найти режим списка, заданный пользователем. Мы прошли этот начальный код в классе. Теперь нам нужно найти один или несколько режимов, заданных пользователем. Кроме того, при вводе этого кода я получаю сообщение об ошибке, указывающее, что индекс выходит за пределы диапазона. Пожалуйста, помогите и спасибо вам заранее!Поиск режима списка без встроенных функций

def calculateMode(dataList): 
    dataList.sort() 
    position = 0 
    largestCount = 0 
    listLength = len(dataList) 
    while(position <= listLength): 
     count = dataList.count(dataList[position]) 
     if(count > largestCount): 
      largestCount = count 
      valuePosition = dataList[position] 
     position += count 
    return dataList[valuePosition] 

userList = [] 
listEntry = float(input("Enter a number (Enter -1 to end): ")) 
while(listEntry >= 0): 
    userList.append(listEntry) 
    listEntry = float(input("Enter a number (Enter -1 to end): ")) 
print(calculateMode(userList)) 

ответ

0

индекс списка начинаются с 0, так что окончание индекс должен быть длина списка - 1

while(position < listLength): 

лучший способ найти режим использует Dict. ключ является пользователем. Значение - это частота.

def mode(data): 
    return sorted(data.items(),key = lambda x: x[1],reverse = True)[0][0] 

print mode( {1:10,10:1,100:4,4:10,5:30,7:3 }) 

5 
0

Возможно, вы захотите использовать метод «счет» Python или используя таблицы хэша. Поскольку это домашнее задание, я не могу дать вам ответ напрямую, но я скажу, что вы можете создать словарь из уникальных элементов списка и количества элементов в этом списке.

С помощью dict вам даже не нужно сортировать список, чтобы посчитать его.

После того как вы что, вы можете найти ключи из максимальных значений в Словаре.

Мне сказали, что это плохая практика, чтобы использовать Интс как ключи словаря, но я думаю, что в этом случае вы будете в порядке :)

Это также можно сделать ж/кортежей, но я считаю, хэш-таблицы, чтобы быть самая эффективная вещь для таких проблем.

while(position <= listLength):  #Definitely a better idea to use *for* here 
     count = dataList.count(dataList[position]) 
     if(count > largestCount): 
      largestCount = count 
      valuePosition = dataList[position] 
     position += count 
    return dataList[valuePosition] 

Ваш код здесь ломается, потому что, когда position == listLength, он будет перебирать список в n-й раз. n> listLength в этом случае. Помните, что ваши индексы 0 и Python 0. Попробуйте listLength-1, если вы хотите сохранить эту практику.

 Смежные вопросы

  • Нет связанных вопросов^_^