在python中用字符串交换字母

时间:2011-12-10 17:05:08

标签: python

我正在尝试切换字符串中的第一个字符并将其移动到字符串的末尾。它需要重复旋转n次。 例如,rotateLeft(hello,2)=llohe

我试过

def rotateLeft(str,n):
    rotated=""
    rotated=str[n:]+str[:n]
    return rotated 

这是对的吗?如果删除最后一个字符并将其移到字符串的前面,你会怎么做?

3 个答案:

答案 0 :(得分:16)

您可以将其缩短为

def rotate(strg,n):
    return strg[n:] + strg[:n]

并简单地使用负数指数“向右”旋转:

>>> rotate("hello", 2)
'llohe'
>>> rotate("hello", -1)
'ohell'
>>> rotate("hello", 1)
'elloh'
>>> rotate("hello", 4)
'ohell'
>>> rotate("hello", -3)
'llohe'
>>> rotate("hello", 6)  # same with -6: no change if n > len(strg)
'hello' 

如果您想在超过琴弦长度后继续旋转,请使用

def rotate(strg,n):
    n = n % len(strg)
    return strg[n:] + strg[:n]

所以你得到了

>>> rotate("hello", 1)
'elloh'
>>> rotate("hello", 6)
'elloh'

答案 1 :(得分:0)

您发布的代码的唯一问题是您尝试使用“str”作为字符串的名称。这是Python中内置函数的名称,这就是您遇到错误的原因。查看更多:http://docs.python.org/library/functions.html#str您不能将其用作某个名称。

更改您传递的字符串名称rotateLeft将解决您的问题。

def rotateLeft(string,n):
    rotated=""
    rotated=string[n:]+string[:n]
    return rotated

答案 2 :(得分:0)

我知道这已经过时了,但您可以使用collections.deque

from collections import deque

s = 'Impending doom approaches!'
d = deque(s)
d.rotate(11)
print(''.join(d))
>>> approaches!Impending doom
d.rotate(-21)
print(''.join(d))
>>> doom approaches!Impending