Python 4.7:如何计算数组中特定值的频率[重复]

Posted

技术标签:

【中文标题】Python 4.7:如何计算数组中特定值的频率[重复]【英文标题】:Python 4.7: How to count the frequency of specific value in array [duplicate] 【发布时间】:2018-04-29 05:55:48 【问题描述】:

基本上我有一个包含 250 个元素的列表,其中一些是 1,一些是 2,一些是 3。我如何获得一个表示“1”数量的变量?

【问题讨论】:

Python 4.7?这是练习的编号吗?当然不是语言版本... Python 4.7?你可能会问未来。但是,我们不做作业。 只需使用list类中的count-方法:例如[1,1,2,1].count(1) 不要太苛刻。第一次问问题。给他一些建议。 @alexisdevarennes 保持原样。编辑它会使所有这些 cmets 偏离主题。 【参考方案1】:

我认为这在 python 4.7 中仍然是这种情况

除了笑话,这将适用于 Python 2.7(和 3 等)

使用 count():

your_list = [1,1,2,3,4,5,6,7,8]
distinct_values = set(your_list)
if len(distinct_values) == len(your_list)
    print('All values have a tf count of 1')
else:
    for distinct_value in distinct_values:
        print('%s n occurences: %s' % (distinct_value, str(your_list.count(distinct_value))))

在(@nfn neil 通过 cmets 提供的解决方案)中使用:

your_list = [1,1,2,3,4,5,6,7,8]
di = 
for item in your_list:
    if item in di:
        di[item] += 1
    else:
        di[item] = 1
print(di)

使用包含 500 000 个项目的列表运行这两种变体 300 次的基准测试:

using_in 的运行时间需要 18.3120000362 秒才能完成

using_count 的运行时间需要 743.9941547110 秒才能完成

基准代码:

https://pastebin.com/dWS8UH7c

【讨论】:

在循环中调用count 需要为每个count 调用单独传递输入。对于具有许多不同项目的输入来说,速度非常慢。 灾难性地意味着它的时间复杂度在 O(n) 中,其中 n 是列表的长度。 不,我很确定这将是 O(n^2) 最坏的情况。假设我们有一个唯一值列表,然后我们循环遍历list 中的每个值。然后我们必须(再次)循环遍历每个项目以获取列表中每个项目的项目计数。 @alexisdevarennes 虽然我很欣赏这个手势,但它并不能解决根本问题。如果每个值在列表中都是唯一的,除了有 1 个重复值。它仍然必须以 n^2 的方式对其进行迭代。 @nfnneil 我说的是count() 方法的时间复杂度。我忘了写count()。你说的对。 else 在最坏的情况下,区块时间复杂度为 O(n^2)。【参考方案2】:

这在 Python 中原生存在

from collections import Counter

A = [1,1,1,1,1,2,2,2,3,3,3,3,3,4,4,4,4]
B = Counter(A)

输出Counter(1: 5, 3: 5, 4: 4, 2: 3)

【讨论】:

不错的方法! 会投票,但没有积分。仍然留下我的答案,以便他了解背后的逻辑。 在无论如何都需要人类可读结果的情况下,你的更好:)

以上是关于Python 4.7:如何计算数组中特定值的频率[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何匹配特定字母并计算其频率? [复制]

如何获得 FFT 中每个值的频率?

利用Python进行数据分析(11)-高阶应用category

使用python从频率数组中进行音调扫描

numpy/python 中的加权平均值

如何计算我的数据中某些特定单词在 hive 中出现的频率?