Python如何提高count()运行时间
研究背景:
Python的 count 是 O(n) 的时间复杂度。其实就是循环,如果数据量过大需要的时间可能超过一个月。
事情是这样的,在一次研究pagerank的算法过程中,有一个列表大小长度上千万,需要找出列表中从0 到len(该列表)中的数字在该列表中出现的次数。
一开始使用最蠢的方法,for循环0 到len(该列表),for循环中再使用count(),写完代码就去睡觉了,结果第二天起床发现,经过一晚上还才处理了6万多条数据,这距离上千万看起来遥遥无期,因此想着改进处理方法,提高速度,最终成功了,处理五千万大小的list只要短短几秒钟。
正文开始
传统的for循环找数字在列表中出现的方法:
举个例子,假设现在有一个大小为100000000的列表,里面存放着从0到5000000的数字。需要你判断每个数字在列表中出现的个数,你会怎么做?
- 传统的for循环+count()
for i in range(0,5000001):
list.count(i)
这种方式将耗费你许多的数据在此阶段。
因此,采用以下方法提高处理速度:
import pandas as pd
#采用pandas库进行处理
df = pd.DataFrame(list,columns=[“list”]) #将list转成DataFrame的格式。
df1 = df[‘list’].value_counts(sort=False)#使用DataFrame的计数方式,sort=False此参数意味着不会改变数据的顺序。
a = df1.index.to_list()
b = df1.values.tolist()
事实证明,此方法处理4千万大小的列表,只要几秒钟,大大提高了数据处理的速度。