使用python查找给定字符串的所有可能旋转

使用python查找给定字符串的所有可能旋转,python,Python,给定字符串为“abc”,则应打印出“abc”、“bca”、“cba” 我的方法是:找到给定字符串的长度,并将其旋转到指定长度 def possible_rotation(): a = "abc" b = len(a) for i in range (b-1): c = a[:i] + a[i:] print c 上面的代码只是打印abc,abc。你知道我遗漏了什么吗?你有两个错误: 范围(b-1)应为范围(b) a[:i]+a[i:][

给定字符串为“abc”,则应打印出“abc”、“bca”、“cba”

我的方法是:找到给定字符串的长度,并将其旋转到指定长度

def possible_rotation():
    a = "abc"
    b = len(a)
    for i in range (b-1):
        c = a[:i] + a[i:]
        print c
上面的代码只是打印abc,abc。你知道我遗漏了什么吗?

你有两个错误:

  • 范围(b-1)
    应为
    范围(b)
  • a[:i]+a[i:][/code>应该是
    a[i:][a[:i]
输出:

abc
bca
驾驶室

您有两个问题。范围问题和旋转逻辑。它应该是
a[i:][a[:i]
而不是相反。对于范围
range(b-1),应该是范围(b)

交换列表

两件事:

首先,正如评论中已经指出的,您应该迭代
range(b)
,而不是
range(b-1)
。通常,
范围(b)
等于
[0,1,…,b-1]
,因此在您的示例中,这将是
[0,1,2]

其次,您切换了这两个术语,它应该是:
a[i:][a[:i]

无需执行(b-1),只需执行以下操作:

def possible_rotation():
    a = "abc"
    for i in range(0,len(a)):
         strng = a[i:]+a[:i]
         print strng
possible_rotation()

`

这看起来像是家庭作业,但这里有一个使用内置的解决方案:

测试一下:

>>> print(possible_rotations('abc'))
cab
bca
abc

这就是我所做的。我使用了一个
deque
,集合中的一个类,然后像这样使用了rotate函数

from collections import deque

string = 'abc'

for i in range(len(string)):
    c = deque(string)
    c.rotate(i)
    print ''.join(list(c))
然后给我这个输出

abc
cab
bca
它的作用。它创建了一个
deque
对象,一个双端队列对象,它有一个方法rotate,rotate采用旋转的步数,并返回向右移动的对象,其步数类似于二进制操作中的
rshift
。通过循环,它将生成一个deque对象,我将其转换为list,最后转换为字符串。 希望这有助于

范围(3)
=>[0,1,2]
>>> print(possible_rotations('abc'))
cab
bca
abc
from collections import deque

string = 'abc'

for i in range(len(string)):
    c = deque(string)
    c.rotate(i)
    print ''.join(list(c))
abc
cab
bca