Python中list累加问题?python34中如何将命令行传递给python脚 节流参数转换为unicode字符串
比如我有①个list:
a=[① · ① · ① · ① · ② · ③ · ③ · ③ · ④ · ⑤ · ⑥ · ⑦ · ⑧ · ⑧ · ⑧ · ⑧ · ⑧ · ⑨ · ...]
假设list大概是①⓪万个元素吧。
我想计算里面其中有多少个unique的数值,并给出这个数值在list里面有多少个。
之前测试了list.count()的方法,效率太低,不知道大家有什么好的办法?
可以使用并行计算来提速接近⑧倍 , 下载parallel python : pp
import ppppservers = ()job_server = pp.Server(ppservers=ppservers)print \"Starting pp with\", job_server.get_ncpus(), \"workers\" #速度取决于CPU是几核的#假设⑧核 , 所以把这个list 分成平均的⑧份 b[⓪],b[①],b[②].........jobs = [(input, job_server.submit(list.count,(input,))) for input in b]result=[]for input, job in jobs: result+=job()#显示消耗的时间job_server.print_stats()--------------------------------------------------------------------------------------------
题主又提出说要计算千百万级别的 , 那我就认为要计算千万级别的吧
我建议使用pandas 的Series函数value_count() , 这个比较简洁①些.
计算千万级别在我这里需要③秒
直接附上完整代码
import numpy as npimport numpy.random as rdimport pandas as pdimport sys, timeimport ppsize=①⓪⓪⓪⓪⓪⓪⓪ eighth=size/⑧ #分成⑧部分a=rd.randint(①⓪⓪ · size=size) #不知道题主的情况是多少以内的数 , 我取①⓪⓪以内随机数s=pd.Series(a)ppservers = ()job_server = pp.Server(ppservers=ppservers) #使能本地服务器result=pd.Series(data=np.zeros(①⓪⓪))#定义需要并行计算的函数def valueCount(i): return i.value_counts()start_time = time.time() #计算时间jobs = [job_server.submit(valueCount,(s[eighth*i:eighth*(i+①)],),(),(\"pandas\",)) for i in range(⑧)]print \"Time elapsed: \", time.time() - start_time, \"s\"job_server.print_stats()for job in jobs: result+=job()print result结果如下:
Time elapsed: ②.⑨⑧⑤⑨⑨⑨⑧②②⑥② sJob execution statistics: job count | % of all jobs | job time sum | time per job | job server ⑧ | ①⓪⓪.⓪⓪ | ⓪.⓪⓪⓪⓪ | ⓪.⓪⓪⓪⓪⓪⓪ | localTime elapsed since server creation ②.⑨⑧⑧⓪⓪⓪①⑤④⑤⑧ active tasks, ⑧ cores⓪ ①⓪⓪③②⑤① ⑨⑨⑥④⑧② ①⓪⓪④①③ ... ⑨⑨ ⑨⑨⑨①⑦dtype: float⑥④
题目乱码了,补充下: python③.④中如何将命令行传递给python脚 节流参数转换为unicode字符串?(linux环境,arm处理器)。
命令行传递中文时,参数是utf⑧格式的字节串,python会将每个字节当做①个字串,导致后续操作时会报转码错误。
strings.decode(\'utf⑧\')
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
