查找没有内置函数的列表模式

时间:2015-11-19 02:25:47

标签: python list mode

对于我的编程课程,我需要找到用户给出的列表模式。我们在课堂上经历了这个起始代码。现在我们需要找到用户给出的单个或多个模式。此外,在输入此代码时,我收到错误消息,指出索引超出范围。请提前帮助并表示感谢!

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))

3 个答案:

答案 0 :(得分:1)

您可以使用迭代方法:

  1. 首先从输入中获取唯一元素。在 Python 的情况下,您可以使用 set

  2. 制作一个 new_empty 字典

  3. 这本字典将键存储为唯一元素,将值存储为当前元素在原始输入中重复的次数

  4. 创建一个新变量(让我们假设现在我创建了名为ma​​x的变量并将其初始化为)这主要是考虑到maximum_occurence元素为零

  5. 现在我们将创建一个从字典中获取值的循环。如果该值 > 大于我们启动的最大值,我们将使用该特定值更新 max 的值。我们将与整个字典一起迭代

  6. 这里我们将得到最大出现值。下一步,我们将创建一个存储众数值的空列表。我们将再次与字典一起迭代。我们将得到值。如果我们使用键获得的值等于我们所做的最大出现次数,我们是否将该键存储在空列表中

  7. 然后打印模式列表 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。