菜单

金沙国际【python cookbook】找骑行列中冒出次数最多的因素

2019年5月12日 - 金沙编程资讯

参照他事他说加以考查资料

 

开始查究

金沙国际,1、collections模块的Counter类
第二想到的是collections模块的Counter类,切切实实用法看这里!具体用法看这里!具体用法看这里!https://docs.python.org/3.6/l…,首要的政工重申二次。

from collections import Counter

words = [
   'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
   'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
   'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
   'my', 'eyes', "you're", 'under'
]

counter_words = Counter(words)
print(counter_words)
most_counter = counter_words.most_common(1)
print(most_counter)

关于most_common([n]):

金沙国际 1

二、依照dict键值唯1性和sorted()函数

import operator

words = [
    'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
    'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
    'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
    'my', 'eyes', "you're", 'under'
]

dict_num = {}
for item in words:
    if item not in dict_num.keys():
        dict_num[item] = words.count(item)

# print(dict_num)

most_counter = sorted(dict_num.items(),key=lambda x: x[1],reverse=True)[0]  
print(most_counter)    

sorted函数:
传送门:https://docs.python.org/3.6/l…

金沙国际 2

iterable:可迭代类型;
key:用列表成分的某部属性或函数实行作为主要字,有私下认可值,迭代聚集中的1项;
reverse:排序规则. reverse = True 降序 只怕 reverse = False
升序,有暗许值。
重临值:是1个透过排序的可迭代类型,与iterable一样。

此间,大家应用无名函数key=lambda x: x[1]
等同于:

def key(x):
    return x[1]

那边,我们运用各个成分出现的次数进行降序排序,获得的结果的第二项正是出新元素最多的项。

 

更进一步

此处给出的行列很轻易,成分的数据很少,不过有的时候,我们的列表中大概存在上百万上千万个成分,那么在这种情形下,差异的消除方案是还是不是效能就能够有非常大距离了吗?
为了证实这些标题,我们来生成3个随便数列表,成分个数为第一百货公司万个。
那边运用numpy
Package,使用前,咱们需求安装该包,numpy包下载地址:https://pypi.python.org/pypi/…。这里我们处境是centos7,选用numpy-一.1肆.二.zip
(md5, pgp)进行下载安装,解压后python setup.py install

 

def generate_data(num=1000000):
    return np.random.randint(num / 10, size=num)

np.random.randint(low[, high, size]) 再次来到随机的平头,位于半开区间
[low, high)
现实用法参谋

OK,数据变化了,让我们来测试一下五个法子所消耗的光阴,总结时间,我们用time函数就能够。

 

#!/usr/bin/python
# coding=utf-8
#
# File: most_elements.py
# Author: ralap
# Data: 2018-4-5
# Description: find most elements in list
#

from collections import Counter
import operator
import numpy as np
import random
import time


def generate_data(num=1000000):
    return np.random.randint(num / 10, size=num)


def collect(test_list):
    counter_words = Counter(test_list)
    print(counter_words)
    most_counter = counter_words.most_common(1)
    print(most_counter)


def list_to_dict(test_list):
    dict_num = {}
    for item in test_list:
        if item not in dict_num.keys():
            dict_num[item] = test_list.count(item)

    most_counter = sorted(dict_num.items(), key=lambda x: x[1], reverse=True)[0]
    print(most_counter)

if __name__ == "__main__":
    list_value = list(generate_data())

    t1 = time.time()
    collect(list_value)
    t2 = time.time()
    print("collect took: %sms" % (t2 - t1))

    t1 = t2
    list_to_dict(list_value)
    t2 = time.time()
    print("list_to_dict took: %sms" % (t2 - t1))

以下结果是自身在谐和本地计算机械运输维结果,主假如对照几个艺术相对消耗费时间间。

金沙国际 3

 

当数码十分大时,消耗费时间间差距竟然如此之大!下一步会越来越商量Counter的贯彻格局,看看究竟是怎么着法力让他质量如此好。

问题

《Python
库克book》中有诸如此类叁个标题,给定多个队列,寻找该连串出现次数最多的成分。
例如:

words = [
   'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
   'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
   'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
   'my', 'eyes', "you're", 'under'
]

计算出words中冒出次数最多的成分?

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图