python – How to get char from string by index?

python – How to get char from string by index?

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
>>> 
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, indexs examples,

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

python – How to get char from string by index?

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]

Leave a Reply

Your email address will not be published. Required fields are marked *