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:如何计算数组中特定值的频率[重复]的主要内容,如果未能解决你的问题,请参考以下文章