python_如何统计序列中元素

问题1:

随机数列[12,5,8,7,8,9,4,8,5,...] 中出现次数最高的3个元素,他们出现的次数

问题2:

对某英文文章的单词,进行词频统计,找出出现次数最搞得10个单词,他们出现的次数是多少?

上面问题都是以字典的形式保存结果

如何解决问题1?

方法1:

#!/usr/bin/python3

from random import randint

def count_seq(data):

    # 初始化统计结果字典,data中的key作为结果字典的key,0作为每个key的初始值
    result_c = dict.fromkeys(data, 0)

    # 循环data,对字典中中碰到的值进行 +1 ,循环完成后就是结果
    for x in data:
        result_c[x] += 1
    return result_c

if __name__ == ‘__main__‘:
    # 生成20个随机数
    data = [randint(0, 20) for _ in range(20)]
    print(data)

    # 结果
    result_c = count_seq(data)
    for i in result_c:
        print(i, result_c[i])

方法2:

使用 collections下Counter对象

#!/usr/bin/python3

from random import randint
from collections import Counter

def count_seq(data):

    # 创建Counter对象,并把打他传递进去
    median_c = Counter(data)

    # 返回统计最大的3个数
    return median_c.most_common(3)

if __name__ == ‘__main__‘:
    # 生成20个随机数
    data = [randint(0, 20) for _ in range(20)]
    print(data)

    # 结果
    result_c = count_seq(data)
    print(result_c, dict(result_c))

问题2如何解决?

import re
from collections import Counter

def count_words():
    # 读取文件
    with open(‘english_article‘, ‘r‘, encoding=‘utf-8‘) as data:
        print()
        # 文件单词分割
        data_list = re.split(‘\W+‘, data.read())
    # 单词统计
    words = Counter(data_list)
    # 取单词统计最大的10个值
    return words.most_common(10)

if __name__ == ‘__main__‘:
    result = count_words()
    print(result)
时间: 2024-09-30 23:27:35

python_如何统计序列中元素的相关文章

python学习--统计序列中元素出现的频度(次数)

例如有一个列表 l=[1,1,-1,2,3,22,34,32,2,-3,34,22,-5] 统计列表中每个元素出现的多少次 方式一: 先把列表变成一个字典dict,字典的key对应列表中的每一个元素,value代表每个元素出现的次数 d=dict.fromkeys(l,0)#两个参数,第一个参数为对应的列表,第二个参数设置dict的默认value=0. 然后,遍历列表中每一个元素,dict中碰到该元素,value就加1. for x in l: d[l]+=1 print(d) 方式二: 利用集

问题3:如何统计序列中元素的出现频度

例1:从随机列表中,找到找到出现次数最高的3个元素,及出现次数 方法一: from random import randint date = [randint(0, 20) for _ in range(100)] c = dict.fromkeys(date, 0) for x in date: c[x] += 1 c2 = sorted(c.items(), key = lambda k:k[1]) c3 = c2[len(c2)-3:] print(c3) date = [randint(

统计序列中元素出现的频度

案例1: 随机序列[1,2,3,4,44,2,3,8...]中,找出次数出现最高的3个元素,并统计他们出现的次数. # eg_v1 from random import randint data = [randint(1, 20) for _ in range(30)] print(data) # [19, 15, 4, 18, 18, 7, 18, 13, 18, 20, 18, 3, 5, 6, 7, 19, 2, 15, 3, 6, 13, 4, 14, 20, 1, 18, 13, 2,

输入的数转化为二进制序列,并统计序列中1的个数

★输入的数转化为二进制序列,并统计序列中1的个数 描述:普通的模除取余后数直接除二的办法易于理解,但是对于输入的数只限于正数和零,对于负数则不适应,所以采用与后移位的方法以此来扩大数的输入范围. #include<stdio.h> int main() { int m,b,c,i; int count = 0; char a[32]; printf("请输入一个数:\n"); scanf("%d", &m); for (i = 0; i <

Python统计列表中元素出现的次数

Python列表可以进行简单的统计,比如list的函数count()可以直接统计元素出现的次数. mylist = [2,2,2,2,2,2,3,3,3,3] myset = set(mylist) #删除列表中的重复元素   print myset    set([2, 3]) for item in myset: print mylist.count(item), " of ", item, " in list" 打印结果: 6 of 2 in list  #

取序列对象中元素出现的次数

取一个序列中元素出现的格式 方法一: from collections import Iterable def action(iterable): reslut = {} if not isinstance(iterable,Iterable): #判断对象是否是可迭代 raise TypeError('is not iterable') #如果不是手动触发异常 for item in iterable: #对对象进行迭代 if item in reslut.keys(): #把元素和元素出现的

顺序统计:寻找序列中第k小的数

最直观的解法,排序之后取下标为k的值即可. 但是此处采取的方法为类似快速排序分块的方法,利用一个支点将序列分为两个子序列(支点左边的值小于支点的值,支点右边大于等于支点的值). 如果支点下标等于k,则支点就是查找的值,如果支点的下标大于k,则在左子序列里继续寻找,如果支点下标小于k,则继续在支点右子序列里面继续寻找第(k-支点下标)小的值. c#实现算法如下: public class FindSpecialOrderElement<T> where T : IComparable<T&

[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 collections.Counter 类 1. most_common(n)统计top_n from collections import Counter words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 't

【python cookbook】【数据结构与算法】16.筛选序列中的元素

问题:提取出序列中的值或者根据某些标准对序列做删减 解决方案:列表推导式.生成器表达式.使用内建的filter()函数 1.列表推导式方法:存在一个潜在的缺点,如果输入数据非常大可能会产生一个庞大的结果,考虑到该问题,建议选择生成器表达式 # Examples of different ways to filter data mylist = [1, 4, -5, 10, -7, 2, 3, -1] print('mylist=',mylist) # 使用列表推导式 pos = [n for n