9

I was trying to make the string HELLO to OHELL in Python. But couldn't get any way to rotate it without working with loops. How to code for it in just 1-2 lines so that I could get the desired pattern?

Mohit Gidwani
  • 103
  • 1
  • 1
  • 5

5 Answers5

14

Here is one way:

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

rotate('HELLO', -1)  # 'OHELL'

Alternatively, collections.deque ("double-ended queue") is optimised for queue-related operations. It has a dedicated rotate() method:

from collections import deque

items = deque('HELLO')
items.rotate(1)

''.join(items)  # 'OHELL'
jpp
  • 147,904
  • 31
  • 244
  • 302
10

You can slice and add strings:

>>> s = 'HELLO'
>>> s[-1] + s[:-1]
'OHELL'

This gives you the last character:

>>> s[-1]
'O'

and this everything but the last:

>>> s[:-1]
'HELL'

Finally, add them with +.

Mike Müller
  • 77,540
  • 18
  • 155
  • 159
  • How should I do if the list is numbers? because I got error : unsupported operand type(s) for +: 'int' and 'list' – Raymond Dec 17 '18 at 17:17
  • This is for strings. Maybe you men a list of numbers `[1, 2, 3]`? `>>> L = [1, 2, 3] >>> L[-1:] + L[:-1] [3, 1, 2]` – Mike Müller Dec 17 '18 at 17:38
5

Here is what I use to rotate strings in Python3:

To rotate left by n:

def leftShift(text,n):
    return text[n:] + text[:n]

To rotate right by n:

def rightShift(text,n):
    return text[-n:] + text[:-n]
Clayton C.
  • 851
  • 1
  • 8
  • 16
2

Here is a simple way of looking at it...

s = 'HELLO'
for r in range(5):
    print(s[r:] + s[:r])


HELLO
ELLOH
LLOHE
LOHEL
OHELL
Konchog
  • 1,690
  • 16
  • 21
0

I would agree with Mike Müller's answer:

s = 'HELLO'
s = s[-1] + s[:-1]

I would like to share another way of looking at s[:-1]

s[0:-1]

This means that it is starting from the start and including everything except for s[-1]. I hope this helped.