遍历动态数量的for循环(Python)

恩茨

我正在使用python对一些数字进行排序。我想创建一个函数,让我输入一个值(4、8、16、32、64等),创建一个数字数组,并重新排列其顺序。

我添加了一些图,这些图详细说明了如何确定value = 4和8的顺序。

对于值= 4,应将数组(x = [0,1,2,3])分成两部分([0,1]和[2,3]),然后根据每个数组中的第一个数字([[ 0,2,1,3])。

数值顺序为4的图

对于值= 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])将数组进行组合。

值= 8的序列图

我不知道如何处理递归(动态嵌套的循环)。我试图遍历通过拆分数组创建的每个分支。我研究过itertools和递归(具有数量不同的For循环(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]

值= 16的输出应为[0、8、4、12、2、10、6、14、1、9、5、13、3、11、7 15]。

迪卡卡

下面是一个使用NumPythonic方式np.transposereshaping-

def seq_pow2(N):
    shp = 2*np.ones(np.log2(N),dtype=int)
    return np.arange(N).reshape(shp).transpose(np.arange(len(shp))[::-1]).ravel()

请注意,.transpose(np.arange(len(shp))[::-1]它将简化为.T,因此我们将拥有一个简化的版本-

def seq_pow2(N):
    shp = 2*np.ones(np.log2(N),dtype=int)
    return np.arange(N).reshape(shp).T.ravel()

您可以进一步简化并做完全取代的转ravel/flattening在列主要订货像fortran.ravel('F')最终导致我们-

def seq_pow2(N):
    shp = 2*np.ones(np.log2(N),dtype=int)
    return np.arange(N).reshape(shp).ravel('F')

样品运行-

In [43]: seq_pow2(4)
Out[43]: array([0, 2, 1, 3])

In [44]: seq_pow2(8)
Out[44]: array([0, 4, 2, 6, 1, 5, 3, 7])

In [45]: seq_pow2(16)
Out[45]: array([ 0,  8,  4, 12,  2, 10,  6, 14,  1,  9,  5, 13,  3, 11,  7, 15])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态遍历“树”给定数量的级别

来自分类Dev

在Python中循环遍历?

来自分类Dev

循环遍历字典python

来自分类Dev

Python 循环遍历 URL

来自分类Dev

在bash中循环遍历动态生成的数组

来自分类Dev

循环遍历 ObservableCollection 以动态扩展嵌套项

来自分类Dev

循环遍历动态嵌套的 javascript 对象

来自分类Dev

Python:遍历可变数量的输入

来自分类Dev

Python for循环遍历目录文件

来自分类Dev

在Python中循环遍历列表

来自分类Dev

遍历python和pandas循环

来自分类Dev

Python循环未遍历xrange

来自分类Dev

python循环遍历yaml配置

来自分类Dev

循环遍历对象和未知数量的孩子

来自分类Dev

如何使用循环创建动态数量的TextBox控件?

来自分类Dev

如何构建动态数组并在AutoIt中循环遍历?

来自分类Dev

如何扩展在BASH中动态遍历数组的循环?

来自分类Dev

循环遍历动态生成的复选框以获取值

来自分类Dev

循环遍历多个数组并动态列出结果

来自分类Dev

python遍历动态分配的Cython数组

来自分类Dev

Python 遍历列表并创建动态变量

来自分类Dev

Python动态循环范围大小

来自分类Dev

基于动态列表python的for循环

来自分类Dev

Python:在while循环中遍历csv

来自分类Dev

在python中接收并循环遍历json数据

来自分类Dev

python遍历dataframe列的迭代循环

来自分类Dev

避免在Python中循环遍历None值

来自分类Dev

Python:requests.get,循环遍历URL

来自分类Dev

Python for循环未遍历所有元素