【问题标题】:Why is this Python code for finding the mode of function not working?为什么这个用于查找函数模式的 Python 代码不起作用?
【发布时间】:2015-03-03 00:49:00
【问题描述】:
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)

我尝试制作这个简单的程序来查找列表的模式,但它只是抛出了超出范围错误的索引。

谢谢

【问题讨论】:

  • lst[x]是列表的最后一个元素时,lst[x+1]在列表之外。
  • 即使您解决了索引问题,您的代码似乎也与查找模式无关。它所做的只是创建一个新列表,其中包含与它们后面的元素相等的所有元素。

标签: python mode


【解决方案1】:

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

附带说明,要计算模式,您可以简单地执行:max(set(lst), key=lst.count),如图所示here

【讨论】:

    【解决方案2】:

    逻辑不正确。

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

    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”的解决方案,尽管它是对寻找模式所涉及的逻辑的直观分解,至少就像你要在纸上手工完成一样。

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2016-07-02
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多