2Xc*_*ion 5 python list python-3.x
所以我试图创建一个函数,它将接受一个参数 numlist(一个非空的数字列表),并返回在 numlist 中出现频率最高的数字的排序列表。
到目前为止,我已经设法创建了一个字典(数字作为键,它们的频率作为值)。但是我还是想找出其中哪一个值最大并返回。问题是我不知道如何比较它们。现在有一些像这样的单线
max(stats, key=stats.get)
Run Code Online (Sandbox Code Playgroud)
但是如果有多个值满足该要求呢?
mode([5, 1, 1, 5])
#I'm guessing this should return [1, 5] if sorted...
Run Code Online (Sandbox Code Playgroud)
你会怎么处理?感谢您对此的任何帮助!
这是我的代码:
def mode(numlist):
mylist = numlist
dic = {}
for num in mylist:
if num in dic:
dic[num] += 1
else:
dic[num] = 1
# try to get the max value and return them in a set form like [1, 0]
Run Code Online (Sandbox Code Playgroud)
您可以使用Counter 返回dict类似对象的对象,其中元素存储为字典键,并且它们的计数存储为字典值。
from collections import Counter
def mode(my_list):
ct = Counter(my_list)
max_value = max(ct.values())
return sorted(key for key, value in ct.items() if value == max_value)
Run Code Online (Sandbox Code Playgroud)
演示:
In [46]: mode([5, 1, 1, 5])
Out[46]: [1, 5]
Run Code Online (Sandbox Code Playgroud)
您可以使用collections.Counter:
from collections import Counter
def mode(num_list):
max_value = float('-inf')
maxes = None
for key, value in Counter(num_list).items():
if value == max_value:
maxes.add(key)
elif value > max_value:
max_value = value
maxes = {key}
return maxes
print(mode([1, 3, 3, 1, 2]))
Run Code Online (Sandbox Code Playgroud)
如果顺序很重要,请使用[key]代替{key}和maxes.append(key)代替maxes.add(key)。
| 归档时间: |
|
| 查看次数: |
5299 次 |
| 最近记录: |