swap letters in a string in python

后端 未结 3 919
广开言路
广开言路 2021-01-12 10:43

I am trying to switch the first character in a string and move it to the end of the string. It needs to repeat the rotation a number of n times. For example, rotateLef

相关标签:
3条回答
  • 2021-01-12 10:46

    The only problem with the code you have posted is the fact that you're trying to use "str" as a name for a string. This is the name of a built in function in Python, and that's why you're getting errors. See more: http://docs.python.org/library/functions.html#str You cannot use that as a name for something.

    Changing the name of the string you pass rotateLeft will solve your problem.

    def rotateLeft(string,n):
        rotated=""
        rotated=string[n:]+string[:n]
        return rotated
    
    0 讨论(0)
  • 2021-01-12 10:54

    You can shorten it to

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

    and simply use negative indices to rotate "to the right":

    >>> 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' 
    

    If you want to keep rotating even after exceeding the length of the string, use

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

    so you get

    >>> rotate("hello", 1)
    'elloh'
    >>> rotate("hello", 6)
    'elloh'
    
    0 讨论(0)
  • 2021-01-12 10:58

    I know this is old, but you can use 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
    
    0 讨论(0)
提交回复
热议问题