python – 翻转列表中的每个第二对
发布时间:2020-12-20 12:14:01 所属栏目:Python 来源:网络整理
导读:什么是将随机数列表分成两组的最快方法,交替翻转每一对?例如: pleatedTuple=(0,1,3,2,4,5,7,6,8,9) 我想在一次操作中: flatPairs=[[0,1],[2,3],[4,5],[6,7],[8,9]] 项目将是随机的单个数字,我只是为了可读性而使它们顺序.我需要在运行中完成数千个这样的
什么是将随机数列表分成两组的最快方法,交替翻转每一对?例如:
pleatedTuple=(0,1,3,2,4,5,7,6,8,9) 我想在一次操作中: flatPairs=[[0,1],[2,3],[4,5],[6,7],[8,9]] 项目将是随机的单个数字,我只是为了可读性而使它们顺序.我需要在运行中完成数千个这样的速度,因此速度优先. Python 3.6.4. 谢谢你的任何想法,我被这一个难过. 解决方法
选项1
只要这是我们正在谈论的对,让我们尝试列表理解: flatPairs = [ [x,y] if i % 2 == 0 else [y,x] for i,(x,y) in enumerate( zip(pleatedTuple[::2],pleatedTuple[1::2]) ) ] 您也可以使用循环从头开始构建: flatPairs = [] for i,y) in enumerate(zip(pleatedTuple[::2],pleatedTuple[1::2])): if i % 2 == 0: flatPairs.append([x,y]) else: flatPairs.append([y,x]) print(flatPairs) [[0,9]] 选项2 # https://stackoverflow.com/a/312464/4909087 def chunks(l,n): """Yield successive n-sized chunks from l.""" for i in range(0,len(l),n): yield l[i:i + n] 调用块并耗尽返回的生成器以获取对的列表: flatPairs = list(chunks(pleatedTuple,n=2)) 现在,用循环反转每隔一对. for i in range(1,len(flatPairs),2): flatPairs[i] = flatPairs[i][::-1] print(flatPairs) [(0,1),(2,3),(4,5),(6,7),(8,9)] 请注意,在这种情况下,结果是元组列表. 性能 # Setup pleatedTuple = tuple(range(100000)) # List comp 21.1 ms ± 1.1 ms per loop (mean ± std. dev. of 7 runs,10 loops each) # Loop 20.8 ms ± 1.71 ms per loop (mean ± std. dev. of 7 runs,10 loops each) # chunks 26 ms ± 2.19 ms per loop (mean ± std. dev. of 7 runs,10 loops each) 为了获得更高的性能,您可以使用更高性能的替代方案替换块生成器: flatPairs = list(zip(pleatedTuple[::2],pleatedTuple[1::2])) 然后根据需要用循环反转.这大大缩短了时间: 13.1 ms ± 994 μs per loop (mean ± std. dev. of 7 runs,100 loops each) 加速2倍,p!但要注意,这并不像发电机那样具有内存效率…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何利用Python词云和wordart可视化工具对朋友圈数据进行可
- python中模块的__all__属性详解
- python – sqlalchemy:在datetime列上应用类似SQL的date()
- 利用xlrd模块实现Python读取Excel文档
- 【python爬虫】windoes的爬虫中文乱码现象,通用转码解决
- 利用Python打造一款语音识别的程序!学会外包项目基本随便接
- macos – 使用python 2.7在mac上安装plpython
- Python爬虫scrapy
- java利用数组求平均值,最大值,最小值
- python – Visual Studio代码Pylint AutoFix在Ubuntu 17.04