鉴于字符串是“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。知道我在这里缺少什么吗?
答案 0 :(得分:2)
您有两个错误:
range(b-1)
应为range(b)
; a[:i] + a[i:]
应为a[i:] + a[:i]
。答案 1 :(得分:2)
def possible_rotation():
a = "abc"
b = len(a)
for i in range (b):
c = a[i:]+a[:i]
print c
possible_rotation()
输出:
abc
bca
cab
你有2个问题。范围问题和轮换逻辑。应该是a[i:]+a[:i]
而不是反过来。对于范围range(b-1) should be range(b)
答案 2 :(得分:1)
这就是我所做的。我在集合中使用了deque
,A类,然后像这样使用了旋转函数
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
对象,一个双端队列对象,它有一个旋转方法,旋转需要旋转的步数,并返回向右移动的对象,其步骤数类似于rshift
在二进制操作中。通过循环它转移广告产生一个deque对象,我转换为列表,最后转换为字符串。
希望这有帮助
答案 3 :(得分:0)
for i in range(b):
print(a[i:] + a[:i])
0 - [a,b,c] + []
1 - [b,c] + [a]
2 - [c ] + [a,b]
交换列表
答案 4 :(得分:-1)
两件事:
首先,正如评论中已经指出的那样,您应该迭代range(b)
而不是range(b-1)
。一般来说,range(b)
等于[0, 1, ..., b-1]
,因此在您的示例中为[0, 1, 2]
。
其次,你改变了两个术语,它应该是:a[i:] + a[:i]
。
答案 5 :(得分:-1)
无需执行(b-1),您只需执行以下操作:
def possible_rotation():
a = "abc"
for i in range(0,len(a)):
strng = a[i:]+a[:i]
print strng
possible_rotation()
`
答案 6 :(得分:-1)
这看起来像是作业,但这是使用内置collections.deque
的解决方案:
from collections import deque
def possible_rotations(string):
rotated = deque(string)
joined = None
while joined != string:
rotated.rotate(1)
joined = ''.join(x for x in rotated)
print(joined)
测试出来:
>>> print(possible_rotations('abc'))
cab
bca
abc