【发布时间】:2016-06-30 23:12:27
【问题描述】:
我正在使用 python 对一些数字进行排序。我想创建一个函数,允许我输入一个值(4、8、16、32、64 等),创建一个数字数组,并重新排列它们的顺序。
我添加了详细说明如何确定 value = 4 和 8 的序列的数字。
对于 value = 4,数组 (x = [0, 1, 2, 3]) 应分成两部分([0,1] 和 [2,3]),然后根据每个数组中的第一个数字组合数组([0, 2 ,1 ,3])。
对于 value = 8,数组 (x = [0, 1, 2, 3, 4, 5, 6, 7]) 应该分成两个([0, 1, 2, 3] 和 [4, 5] , 6, 7])。两个数组都应该再次分成两部分([0, 1, 2, 3] 分为 [0,1] 和 [2,3] 和 [4, 5, 6, 7] 分为 [4,5] 和 [6, 7])。然后根据每个数组中的第一个数字和第二组数组的顺序([0, 4, 2, 6, 1, 5, 3, 7])组合数组。
我不知道如何处理递归(动态嵌套的 for 循环)。我正在尝试遍历通过拆分数组创建的每个分支。我研究了 itertools 和递归(Function with varying number of For Loops (python)),但我无法让它工作。下面,我添加了代码来说明我迄今为止的方法。
非常感谢任何帮助。我也愿意接受其他想法来确定顺序。
我正在使用 python 2.7.6 和 numpy。
代码:
import numpy
value = 4
a = []
x = numpy.arange(value)
y = numpy.array_split(x, 2)
for i in range(2):
for j in y:
a.append(j.tolist()[i])
print(a)
输出:
[0, 2, 1, 3]
代码:
import numpy
value = 8
a = []
x = numpy.arange(value)
y = numpy.array_split(x, 2)
for i in range(2):
for h in range(2):
for j in y:
z = numpy.array_split(j, 2)
a.append(z[h][i])
print(a)
输出:
[0, 4, 2, 6, 1, 5, 3, 7]
value = 16 的输出应该是 [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11 ,7 15]。
【问题讨论】:
-
你需要 numpy 的解决方案吗?我认为这可以用普通的 python 完成
-
我想说的是,您需要采用二进制形式的数字并按反字母顺序对它们进行排序
标签: python arrays for-loop numpy