我正在尝试检索列表中最频繁和不太频繁的元素。
frequency([13,12,11,13,14,13,7,11,13,14,12,14,14])
我的输出是:
([7], [13, 14])
我试了一下:
import collections
s = [13,12,11,13,14,13,7,11,13,14,12,14,14]
count = collections.Counter(s)
mins = [a for a, b in count.items() if b == min(count.values())]
maxes = [a for a, b in count.items() if b == max(count.values())]
final_vals = [mins, maxes]
但我不想使用集合
模块并尝试更面向逻辑的解决方案。
你能帮我做没有收集吗?
s = [13,12,11,13,14,13,7,11,13,14,12,14,14]
occurrences = dict()
for item in s:
occurrences[item] = occurrences.setdefault(item, 0) + 1
mins = [a for a, b in occurrences.items() if b == min(occurrences.values())]
maxs = [a for a, b in occurrences.items() if b == max(occurrences.values())]
final_vals = [mins, maxs]
集合
中的default
更适合替换计数器
来计算列表中项目的出现次数。但是因为你限制了集合
的使用。所以setdefault
处理KeyError
更优雅。
data = [13,12,11,13,14,13,7,11,13,14,12,14,14]
occurrences = {}
for i in data:
if i in occurrences.keys():
occurrences[i] += 1
else:
occurrences[i] = 1
max_vals = [i for i in occurrences.keys() if occurrences[i] == max(occurrences.values())]
min_vals = [i for i in occurrences.keys() if occurrences[i] == min(occurrences.values())]
您可以对< code>dict使用< code>try和< code>except方法来模拟< code >计数器。
def counter(it):
counts = {}
for item in it:
try:
counts[item] += 1
except KeyError:
counts[item] = 1
return counts
或者,您可以使用< code>dict.get,默认值为< code>0:
def counter(it):
counts = {}
for item in it:
counts[item] = counts.get(item, 0) + 1
return counts
你应该在理解之外做min()
和max(),
以避免重复计算这个数量(函数现在是O(n)
而不是O(n^2):
:
def minimum_and_maximum_frequency(cnts):
min_ = min(cnts.values())
max_ = max(cnts.values())
min_items = [k for k, cnt in cnts.items() if cnt == min_]
max_items = [k for k, cnt in cnts.items() if cnt == max_]
return min_items, max_items
这将按预期工作:
>>> minimum_and_maximum_frequency(counter([13,12,11,13,14,13,7,11,13,14,12,14,14]))
([7], [13, 14])
问题内容: 是否有更好的方法来计数Java8中的int出现次数 问题答案: 尝试:
问题内容: 给定具有可能重复项的对象的集合,我想最后对每个对象的出现次数进行计数。我通过初始化一个empty ,然后遍历并将对象映射到其计数(每次映射已经包含该对象时增加计数)来实现。 对于计算发生次数的简单逻辑而言,这看起来太冗长。有没有更优雅/更短的方法呢?我对完全不同的算法或特定于Java语言的功能持开放态度,该功能允许使用较短的代码。 问题答案: 查看Guava的Multiset。几乎正是
问题内容: 假设我有一个包含以下值的表。 所以我想构造以下输出。 它仅获取列中每个元素的计数。 我在列出唯一列时遇到了问题。 谁能告诉我该怎么做? 我已经弄乱了和,但是无法获取左侧的值列表。 问题答案: 你是这个意思吗
问题内容: 我正在尝试计算中每行显示的数字,例如: 行显示3次。 一个简单的天真的解决方案将涉及将我所有的行都转换为元组,然后应用,如下所示: 产生: 但是,我担心我的方法的效率。也许有一个提供此功能的内置库。我将此问题标记为,因为我认为它可能具有我正在寻找的工具。 问题答案: 您可以使用另一个问题的答案来获得唯一项目的计数。 使用结构化数组的另一种选择是使用一种void类型的视图,该视图将整行连
问题内容: 我的sql查询获取固件的错误修复验证列表,例如def-456是一张票,要求我对产品进行固件测试。def-456有几个子任务,记录结果。结果记录为:id:abc-123,abc-124,abc-125等(如下表所示)。这些对应的ID的结果为“通过”或“失败”。我需要计算两个值----> 1.尝试次数:在以下示例中,尝试次数将为3/5,有3次通过和2次失败(即通过/通过+失败),在这里我可
问题内容: 我有一个重复条目的单词。 我想计算并保存数据结构中每个单词的出现次数。 我该怎么做? 问题答案: 如果您没有大量的字符串,最短的实现方法是使用方法,如下所示: 输出: