首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python数组旋转

Python数组旋转
EN

Stack Overflow用户
提问于 2013-06-28 02:10:59
回答 9查看 53.5K关注 0票数 17

所以我用python实现了一个块交换算法。

我遵循的算法如下:

初始化A= arr0..d-1和B= arrd..n- 1 )执行以下操作,直到A的大小等于B的大小

a)如果A较短,则将B分为B1和Br,使得Br与A的长度相同。交换A和Br以将ABlBr变为BrBlA。现在A在它的最后位置,所以重复B的片段。

b)如果A较长,则将A划分为A1和Ar,使得Al与B的长度相同,将A1和B互换,将AlArB转换为BArAl。现在B在它的最后位置,所以重复A的片段。

2)最后,当A和B大小相等时,对它们进行块交换。

同样的算法已经在这个网站上用C语言实现-- Array Rotation

我的python代码是这样的

代码语言:javascript
复制
a = [1,2,3,4,5,6,7,8]

x = 2

n = len(a)


def rotate(a,x):
    n = len(a)

    if x == 0 or x == n:
        return a

    if x == n -x:
        print(a)
        for i in range(x):
            a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
        print(a)
        return a

    if x < n-x:
        print(a)
        for i in range(x):
            a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
        print(a)
        rotate(a[:n-x],x)
    else:
        print(a)
        for i in range(n-x):
            a[i], a[(i-(n-x) + n) % n] = a[(i-(n-x) + n) % n] , a[i]
        print(a)
        rotate(a[n-x:], n-x)

rotate(a,x)
print(a)

我在每个阶段都得到了正确的值,但递归函数调用没有返回预期的结果,而且我似乎无法理解原因。有人能解释一下我的递归出了什么问题吗?还有什么是可能的替代方案。

EN

回答 9

Stack Overflow用户

发布于 2017-10-20 17:50:49

在Python中,一个简单而简明的数组循环语法是

代码语言:javascript
复制
arr = arr[numOfRotations:]+arr[:numOfRotations]

示例:

代码语言:javascript
复制
arr = [1,2,3,4,5]
rotations = 4
then 

arr = arr[4:]+arr[:4]

给了我们

5,1,2,3,4

票数 16
EN

Stack Overflow用户

发布于 2013-06-28 02:20:50

您是否真的需要实现数据块交换,或者只是希望轮换阵列?在python中,您可以使用以下命令执行CW和CWW旋转

代码语言:javascript
复制
zip(*arr[::-1])

代码语言:javascript
复制
zip(*arr)[::-1]
票数 5
EN

Stack Overflow用户

发布于 2013-06-28 02:25:19

我希望当你将一个片段传递给你的递归调用时,你不会再传递相同的变量了。尝试将整个和切片的上下限作为附加参数传递给函数。

例如,考虑这个函数:

代码语言:javascript
复制
def silly(z):
  z[0] = 2

我刚刚尝试了以下几种方法:

代码语言:javascript
复制
>>> z = [9,9,9,9,9,9]
>>> silly(z)
>>> z
[2, 9, 9, 9, 9, 9]
>>> silly(z[3:])
>>> z
[2, 9, 9, 9, 9, 9]

您可以看到,对切片所做的修改未保留在完整阵列中

出于好奇心,你得到了什么输出&你期望什么输出?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17350330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档