对于我的编程课程,我需要找到用户给出的列表模式。我们在课堂上经历了这个起始代码。现在我们需要找到用户给出的单个或多个模式。此外,在输入此代码时,我收到错误消息,指出索引超出范围。请提前帮助并表示感谢!
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 :(得分:1)
您可以使用迭代方法:
首先从输入中获取唯一元素。在 Python 的情况下,您可以使用 set
制作一个 new_empty 字典
这本字典将键存储为唯一元素,将值存储为当前元素在原始输入中重复的次数>
创建一个新变量(让我们假设现在我创建了名为max的变量并将其初始化为零)这主要是考虑到maximum_occurence元素为零
现在我们将创建一个从字典中获取值的循环。如果该值 > 大于我们启动的最大值,我们将使用该特定值更新 max 的值。我们将与整个字典一起迭代
这里我们将得到最大出现值。下一步,我们将创建一个存储众数值的空列表。我们将再次与字典一起迭代。我们将得到值。如果我们使用键获得的值等于我们所做的最大出现次数,我们是否将该键存储在空列表中
然后打印模式列表
Hurray
!!!你有模式
def find_mode(num_list):
enter code here # Complete this function
unique_num_list = list(set(num_list))
dictionary = {}
for i in unique_num_list:
get_count = num_list.count(i)
dictionary[i]= get_count
max_repeat = 0
for i in unique_num_list:
get_value = dictionary[i]
if get_value>max_repeat:
max_repeat = get_value
result = ''
for i in unique_num_list:
if dictionary[i]==max_repeat:
result = result+str(i)+" "
return result
num_list = list(map(int, input().split()))
# Call the appropriate functions and print the results
mode = find_mode(num_list)
print(mode)
答案 1 :(得分:0)
列表索引从0开始,因此结束索引应该是list的长度 - 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
答案 2 :(得分:0)
您可能希望使用Python的“count”方法或使用哈希表。 由于这是作业,我不能直接给你答案,但我会说你可以创建列表中唯一元素的字典以及该列表中有多少项。
使用dict,您甚至不需要对列表进行排序来计算它。
完成后,您可以找到该词典的最大值的键。
我被告知使用int作为字典键是不好的做法,但我认为在这种情况下你会没事的:)
这也可以用元组完成,但我觉得哈希表对于像这样的问题最有效。
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。