【发布时间】:2015-08-15 15:11:33
【问题描述】:
我目前正在 Python 3 中处理这个函数:
def BToBInter(Array):
NewA = []
Amount = 23
Res = 0
M = len(Array) - 24
for P in range(M):
for I in Array[P:P+24]:
if I == 1:
Res += (1 << Amount)
Amount -= 1
NewA.append(Res)
Amount = 23
Res = 0
return NewA
想法是:
- 输入“数组”是一个 Python 位列表(1 和 0);
- 首先,读取列表的第 0 到 23 位,转换为整数并添加到列表“NewA”中;
- 然后读取位 1 到 24,然后读取 2 到 25、3 到 26 等等。
因此,N 位的位列表会产生 N-24 个整数的整数列表。
这对于大型位列表运行相当缓慢。 Cython 有帮助,但我觉得代码可以更有效地开始。我经常使用列表推导,但我不确定如何将它们应用于这些嵌套循环。有什么建议吗?
【问题讨论】:
-
看起来你正在实现一个移动窗口;您可以使用
itertools来执行此操作,请参见例如github.com/mahmoud/boltons/blob/master/boltons/… -
阵列有多大?你需要算法有多快?顺便说一句,请不要对变量和函数使用大写的名称……这些名称是用于类的,只会引起混淆。
标签: python list loops nested bits