为什么这个用于查找函数模式的Python代码不起作用?

时间:2015-03-03 00:49:01

标签: python mode

lst = [3, 4, 3, 5, 3]

def lstmaker(lst):
   lst1 = []
   x = 0
   while x < len(lst): 
        if lst[x] == lst[x+1]:
            lst1.append(lst[x])
        else:
            pass
        x+=1
   print lst1
lstmaker(lst)

我试图让这个简单的程序找到列表的模式,但它只是抛出了范围错误的索引。

谢谢

2 个答案:

答案 0 :(得分:2)

对于x的最后一个值,lst[x+1] x + 1超出范围。 while循环应为while x < len(lst) -1

作为旁注,要计算模式,您只需执行:max(set(lst), key=lst.count),如here所示。

答案 1 :(得分:1)

逻辑错误。

对于初学者来说,你得到索引超出范围问题的原因是因为行

if lst[x] == lst[x+1]

x在整个循环中正确递增,但当x位于最后一个索引时,+1位访问不在列表中的索引(例如索引5)大小清单5)。

此外,您在循环中实际执行的操作似乎并未使您获得该模式的值。模式是列表中出现次数最多的元素。解决此问题的一种方法可能是使用字典(dict()),其中“键”是列表中的元素,“值”是每个元素出现的次数。

尝试这样的事情:

# lst defined up here
occurrences = dict()
for x in lst:
    if x in occurrences:
        occurrences[x] += 1
    else:
        occurrences[x] = 1

mode = occurrences.keys()[0]
for k in occurrences:
    if occurrences[k] >= mode:
        mode = k
print(mode) # or return, etc.

这可能不是最“Pythonic”的解决方案,虽然它是对查找模式所涉及的逻辑的直观细分,至少就像你是在纸上手工完成一样。

相关问题