【问题标题】:Finding the most frequent element in a list excluding a certain character查找列表中不包括某个字符的最频繁元素
【发布时间】:2022-08-16 10:57:04
【问题描述】:

我需要运行一个函数,该函数返回列表中除某个字符(在本例中为字符\"W\")之外最常见的元素。

例如,如果我有一个列表n = [\'W\', 3, \'W\', 1, \'W\', 3, 2, 2, 3, 2],我将如何获得输出\"2\"3 而不是\"W\"statistics.mode() 目前正在给 “W”。也许我应该只检查字符串?

任何帮助,将不胜感激。谢谢!

  • 为什么2 不是3 在这里?你可以解释吗?因为{\'W\': 3, 3: 3, 2: 3, 1: 1}) 因为这两个数字出现的时间相同。
  • @Ender 我没有投反对票,但没有试图解决问题的问题(理想情况下是使用代码)通常会被投反对票
  • 我尝试运行 statistics.mode()... 不过感谢您的反馈!
  • 我确实使用 collections.Counter 提供了答案,但它显然不符合标准,所以我将其删除
  • 你能把它放在这里吗?为了其他用户的利益,我将不胜感激将答案放在这里,即使它不符合标准。

标签: python list


【解决方案1】:

尝试使用

statistics.mode([v for v in n if v != 'W'])

反而。有关列表推导的更多详细信息,请查看 this 链接。

【讨论】:

  • 您也可以申请filter()statistics.mode(filter('W'.__ne__, n))
  • 你能解释一下filter()__ne__ 是什么吗?
  • @Ender,在filter() 的文档中,您可以阅读以下内容:"从这些元素构造一个迭代器可迭代的(第二个论点)功能(第一个参数)返回 true".所以我们需要传递一个可调用对象,如果必须过滤项目,它将返回False。在 Python 数据模型中,您可以发现 object.__ne__() 是由 a != b 表达式调用的函数。因此,当我们通过'W'.__ne__ 进行过滤时,它将检查可迭代的每个项目是否不等于'W'
  • @Enderman 不客气,但老实说,谁不明白v for v in n if v != 'W' 的意思?语法糖使这一点几乎是简单的英语。
  • @Enderman 明白了 Enderman 先生。
【解决方案2】:
thisdict = {
}

n = ["W", 3, "W", 1, "W", 3, 2, 2, 3, 2]

for i in n:

  if i in thisdict.keys():

    thisdict[i] = thisdict[i] + 1

  else:

    if (i == "W"):
      continue

    thisdict[i] =  1

max = 0
maxKey = None

for key in thisdict.keys():

    if( thisdict[key] >= max ):

    max = thisdict[key]

    maxKey = key

print("Element Occurred Max Number of Times-->", maxKey)

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • 您的代码可能有效,但其他用户可能不知道此代码的含义。请考虑在您的代码中添加 cmets 并解释其作用。我投了反对票,因为您需要添加解释,编辑帖子时我将删除反对票。
猜你喜欢
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多