Lets say I have a string that consists of x unknown chars. How could I get char nr. 13 or char nr. x-14?

7 Answers

First make sure the required number is a valid index for the string from beginning or end , then you can simply use array subscript notation. use len(s) to get string length

>>> s = "python" >>> s[3] 'h' >>> s[6] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> s[0] 'p' >>> s[-1] 'n' >>> s[-6] 'p' >>> s[-7] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> 
5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs" In [2]: len(x) Out[2]: 45 

Now, For positive index ranges for x is from 0 to 44 (i.e. length - 1)

In [3]: x[0] Out[3]: 'a' In [4]: x[45] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) /home/<ipython console> in <module>() IndexError: string index out of range In [5]: x[44] Out[5]: 's' 

For Negative index, index ranges from -1 to -45

In [6]: x[-1] Out[6]: 's' In [7]: x[-45] Out[7]: 'a 

For negative index, negative [length -1] i.e. the last valid value of positive index will give second list element as the list is read in reverse order,

In [8]: x[-44] Out[8]: 'n' 

Other, index's examples,

In [9]: x[1] Out[9]: 'n' In [10]: x[-9] Out[10]: '7' 
2

Previous answers cover about ASCII character at a certain index.

It is a little bit troublesome to get a Unicode character at a certain index in Python 2.

E.g., with s = '한국中国にっぽん' which is <type 'str'>,

__getitem__, e.g., s[i] , does not lead you to where you desire. It will spit out semething like . (Many Unicode characters are more than 1 byte but __getitem__ in Python 2 is incremented by 1 byte.)

In this Python 2 case, you can solve the problem by decoding:

s = '한국中国にっぽん' s = s.decode('utf-8') for i in range(len(s)): print s[i] 

Python.org has an excellent section on strings here. Scroll down to where it says "slice notation".

Another recommended exersice for understanding lists and indexes:

L = ['a', 'b', 'c'] for index, item in enumerate(L): print index + '\n' + item 0 a 1 b 2 c 

This should further clarify the points:

a = int(raw_input('Enter the index')) str1 = 'Example' leng = len(str1) if (a < (len-1)) and (a > (-len)): print str1[a] else: print('Index overflow') 

Input 3 Output m

Input -3 Output p

I think this is more clear than describing it in words

s = 'python' print(len(s)) 6 print(s[5]) 'n' print(s[len(s) - 1]) 'n' print(s[-1]) 'n' 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy