【问题标题】:Building a custom Counter function without using built-ins在不使用内置函数的情况下构建自定义计数器函数
【发布时间】:2018-04-28 12:43:18
【问题描述】:

我有这个代码:

L = [1, 4, 7, 5, 5, 4, 5, 1, 1, 1]

def frequency(L):
    counter = 0
    number = L[0]
    for i in L:
        amount_times = L.count(i)
        if amount_times > counter:
            counter = amount_times
            number = i
    return number

print(frequency(L))

但我不想使用计数器功能。我想让代码在没有任何内置函数的情况下运行。我该怎么做?

【问题讨论】:

  • 你为什么想要那个?您也可以使用导入集合计数器,但您可能只需要更多的 for 循环。
  • 所有标准库函数和语言内置数据对象,您可以根据需要以其他方式实现count
  • 因为我有作业,我们不能使用内置函数
  • 输出将与大多数频率数字或字符串一致。如果输入 1 1 1 2 2 3,大多数频率是; 1. 输出为 1...

标签: python function counter frequency


【解决方案1】:

如果您真的想要重塑collections.Counter,无论有没有list.count,这都是可能的。但是,我认为没有任何理由。

使用list.count,您可以使用字典理解。这是低效的,因为列表为每个变量传递一次。

def frequency2(L):
    return {i: L.count(i) for i in set(L)}

如果您不想使用list.count,可以使用if / else

def frequency3(L):
    d = {}
    for i in L:
        if i in d:
            d[i] += 1
        else:
            d[i] = 0
    return d

然后提取最高计数:

maxval = max(d.values())
res = [k for k, v in d.items() if v == maxval]

【讨论】:

  • 第二个代码完全符合我的要求。但我想从显示我们最多频率数的代码中获取。所以我的意思是,上面的代码中只有“1”。
  • 好的,请参阅更新。如果你想重新发明max,另一个答案会更好。
  • 我想要的东西太多了抱歉。但该代码不适合我,因为我学校的现成代码不是免费的:/
【解决方案2】:

你可以试试这个。不知道这个你是否可以接受。

这在不使用内置函数的情况下查找列表中最常见的项目:

L = [1, 4, 7, 5, 5, 4, 5, 1, 1, 1]

def frequency(L):
    count, item = 0, ''
    d = {i:0 for i in L}
    for i in L[::-1]:
         d[i] = d[i] + 1
         if d[i] >= count :
             count = d[i]
             item = i
    return item

print(frequency(L))
# 1

【讨论】:

  • 这很好。但我在学校没有看到; {} 我可以使用 [] 或 ""。我的意思是列表或字符串。我可以用吗? --> d = {} ---> d = []
  • 不,带有键和值的{} 是字典,[] 是一个列表。了解更多关于字典的信息。 d = {....}上面的那个叫字典理解,不知道是不是你们学校的课程。
猜你喜欢
  • 2014-09-18
  • 2015-05-25
  • 1970-01-01
  • 2023-03-09
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
相关资源
最近更新 更多