def mode(L):
shows = []
modeList = []
L.sort()
length = len(L)
for num in L:
count = L.count(num)
shows.append(count)
print 'List = ', L
maxI = shows.index(max(shows))
for i in shows:
if i == maxI:
if modeList == []:
mode = L[i]
modeList.append(mode)
print 'Mode = ', mode
elif mode not in modeList:
mode = L[i]
modeList.append(mode)
print 'Mode = ', mode
return mode
mode(L)
我似乎无法正确地遍历我的列表。。。
我可以使用第二个for循环成功地让第一个模式返回Mode = 87
,但是我不能让它搜索列表的其余部分,这样它也将返回Mode = 92
我已经删除了我在Mode = 92
上的尝试,有人能帮我填空吗?在
代码的第一个问题是循环中有一个
return
语句。当它到达时,函数结束,其余的迭代永远不会发生。您应该删除return mode
,而应该在循环结束后,将return modeList
放在函数的顶层。在第二个问题是上一个循环中关于计数、索引和值的逻辑非常混乱。它有时会起作用,因为您正在测试的输入往往具有计数,这些计数也是有效的索引,但它几乎是偶然获得正确的结果。您要做的是找到最大计数,然后找到具有该计数的所有值。如果您
zip
您的输入列表L
与shows
列表一起使用,则可以完全避免使用索引:虽然这应该能解决当前的问题,但我觉得我应该建议一个替代的实现,它将更快、更高效(更不用说需要更少的代码)。与其使用
^{pr2}$list.count
来查找列表中每个值的出现次数(这需要O(N**2)
时间),不如使用collections.Counter
来计算O(N)
时间。其他代码也可以简化一点:相关问题 更多 >
编程相关推荐