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)
我试图让这个简单的程序找到列表的模式,但它只是抛出了范围错误的索引。
谢谢
答案 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”的解决方案,虽然它是对查找模式所涉及的逻辑的直观细分,至少就像你是在纸上手工完成一样。