使用python查找给定字符串的所有可能旋转
给定字符串为“abc”,则应打印出“abc”、“bca”、“cba” 我的方法是:找到给定字符串的长度,并将其旋转到指定长度使用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:][
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