Python中文
首页
教程
问答
标签
搜索
登录
注册
python中交换字节的有效方法
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一些长度为<code>2*n</code>的<code>bytearray</code>:</p> <pre><code>a1 a2 b1 b2 c1 c2 </code></pre> <p>我需要在每个2字节的单词中切换字节endian,并使:</p> <pre><code>a2 a1 b2 b1 c2 c1 </code></pre> <p>现在我使用了下一种方法,但它对我的任务来说非常缓慢:</p> <pre><code>converted = bytearray([]) for i in range(int(len(chunk)/2)): converted += bytearray([ chunk[i*2+1], chunk[i*2] ]) </code></pre> <p>是否可以通过调用某些system/libc函数来切换<code>bytearray</code>的endian?</p> <hr/> <p>好吧,多亏了大家,我给了一些建议:</p> <pre><code>import timeit test = [ """ converted = bytearray([]) for i in range(int(len(chunk)/2)): converted += bytearray([ chunk[i*2+1], chunk[i*2] ]) """, """ for i in range(0, len(chunk), 2): chunk[i], chunk[i+1] = chunk[i+1], chunk[i] """, """ byteswapped = bytearray([0]) * len(chunk) byteswapped[0::2] = chunk[1::2] byteswapped[1::2] = chunk[0::2] """, """ chunk[0::2], chunk[1::2] = chunk[1::2], chunk[0::2] """ ] for t in test: print(timeit.timeit(t, setup='chunk = bytearray([1]*10)')) </code></pre> <p>结果是:</p> <pre><code>$ python ti.py 11.6219761372 2.61883187294 3.47194099426 1.66421198845 </code></pre> <p>所以在速度片分配中,现在2步是最快的。也感谢F先生的详细解释,但我还没有尝试,因为<code>numpy</code></p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>也可以将它们交换到适当的位置并使用原始数组。</p> <pre><code>chunk = bytearray([1,2,3,4]) for i in range(0, len(chunk), 2): chunk[i], chunk[i+1] = chunk[i+1], chunk[i] </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
(编辑)背景2+均值漂移跟踪?
3 回答
(网络爬虫)如何从新闻网站获取新闻段落的文本
9 回答
(置换)列表的唯一组合
8 回答
(美丽的soap4,)AttributeError:“非类型”对象没有属性“获取文本”
4 回答
(聊天室)使用套接字通常只允许一个地址(协议/网络地址/端口)
6 回答
(自动)在Pycharm/Python中的=后缩进
6 回答
(自动Py到Exe和Python)找不到“googleapipythonclient”发行版,该发行版是应用程序所必需的
4 回答
(自动操作)write()和do for循环的Odoo问题
5 回答
(自定义)百分位MSE损失函数
5 回答
(自定义用户)createsuperuser TypeError:hasattr():属性名必须是字符串
7 回答
(节点)警告:检测到可能的EventEmitter内存泄漏。添加了11个消息侦听器。使用emitter.setMaxListeners()增加limi
9 回答
(若变量中有字符串)语句未筛选出数据
2 回答
(英语、Perl、Python、Ruby)在代码片段的基础上进行比较?
10 回答
(范围(1,36),7)和+条件下的所有组合
1 回答
(范围(3),范围(3))值错误:要解压缩的值太多(预期为2)
6 回答
(蟒蛇) 平均分配数字
9 回答
(行、列):数据帧的值
6 回答
(行、列)形式的最小值
2 回答
(解决)导入PYBID11/C++编译模块不工作
6 回答
(记忆有效)将“排序”作为生成器实现
8 回答