listg = [1,2,3,4,4,5,2]
modeval = [0]
modetimes = [0]
for i in range(len(listg)):
count = listg.count(listg(i))
if count > modetimes[0]:
modeval = [listg(i)]
count = [modeval]
elif count == modetimes[0]:
if listg in modeval:
modeval.remove[listg(i)]
modeval.append[listg(i)]
mode = modeval
print (mode)
我试图在不使用lambdas或模式函数的情况下找到列表的模式,但每当我在
中使用圆括号时count = listg.count(listg(i))
和
modeval = [list(i)]
我得到TypeError:'list'对象不可调用。我尝试将i周围的方括号转换成圆形但是当我这样做时,打印的数字是列表中的最后一个。
答案 0 :(得分:2)
您需要使用括号进行索引:将listg(i)
更改为listg[i]
。回溯表示,括号用于函数/方法调用。
另外,我对你想要完成的事情感到有点困惑,但我认为在这种情况下使用for i in range(len(listg)):
通常被认为是一种Python反模式。您可以通过直接遍历列表中的值来创建"beautiful, idiomatic Python",而不是使用索引:
for i in listg:
count = listg.count(i)
if count > modetimes[0]:
modeval = [i]
count = [modeval]
...
此处i
将是来自listg
的实际元素,而不是用于检索元素的索引。
另请注意,分配给方括号中的单个对象(例如modeval = [0]
)将为您提供单项列表。如果这就是你想要的那么好,但如果这不是你的意图,它可能会导致令人困惑的结果。