Làm thế nào để lấy char từ chuỗi theo chỉ mục?


91

Giả sử tôi có một chuỗi bao gồm x ký tự không xác định. Làm thế nào tôi có thể nhận được char nr. 13 hoặc char nr. x-14?

Câu trả lời:


129

Trước tiên, hãy đảm bảo rằng số được yêu cầu là chỉ mục hợp lệ cho chuỗi từ đầu hoặc cuối, sau đó bạn có thể chỉ cần sử dụng ký hiệu mảng con. sử dụng len(s)để lấy độ dài chuỗi

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

1
Bạn có thể vượt qua số nguyên âm
Aviram Segal

@AviramSegal Cảm ơn bạn đã chỉnh sửa, Có, chúng tôi có thể, nhưng chúng cũng phải nằm trong giới hạn độ dài chuỗi.
DhruvPathak

1
sau khi chỉnh sửa của bạn, nó là câu trả lời hay nhất, hãy bình chọn lên thay vì bỏ :)
Aviram Segal

1
Câu trả lời này có thể được cải thiện bằng cách sử dụng một từ khác với các ký tự duy nhất ở mỗi chỉ mục. Vì nó là viết tắt của [3] là không rõ ràng về việc nó đang quay trở lại 'l' nào.
Hãy tử tế với người dùng mới vào

1
Tại sao s[-5]có thể hoạt động, nhưng s[-6]lại phàn nàn lỗi chỉ mục nằm ngoài phạm vi? Thật tò mò về việc triển khai đối tượng chuỗi trong Python.
Alston

5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Bây giờ, đối với phạm vi chỉ số dương cho x là từ 0 đến 44 (tức là độ dài - 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'

Đối với chỉ mục Tiêu cực, chỉ số nằm trong khoảng từ -1 đến -45

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

Đối với chỉ mục âm, [độ dài -1] âm, tức là giá trị hợp lệ cuối cùng của chỉ mục dương sẽ cho phần tử danh sách thứ hai vì danh sách được đọc theo thứ tự ngược lại,

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

Khác, ví dụ của chỉ mục,

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

Bạn nên đưa ra một số mô tả bằng lời về những gì đang xảy ra, mặc dù câu hỏi có vẻ cơ bản đối với bạn.
Hannele

Cập nhật câu trả lời với một số mô tả, hy vọng nó sẽ giúp :)
avasal

3

Các câu trả lời trước bao gồm về ASCII charactermột chỉ mục nhất định.

Có một chút rắc rối khi đạt được một Unicode characterchỉ mục nhất định trong Python 2.

Ví dụ, với s = '한국中国にっぽん'nghĩa là <type 'str'>,

__getitem__chẳng hạn, s[i]không dẫn bạn đến nơi bạn mong muốn. Nó sẽ phun ra thứ gì đó như thế nào . (Nhiều ký tự Unicode lớn hơn 1 byte nhưng __getitem__trong Python 2 được tăng thêm 1 byte.)

Trong trường hợp Python 2 này, bạn có thể giải quyết vấn đề bằng cách giải mã:

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

2

Python.org có một phần tuyệt vời về chuỗi ở đây . Cuộn xuống nơi có nội dung "ký hiệu lát cắt".


1

Một cách khác được đề xuất để hiểu danh sách và chỉ mục:

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

0
a
1
b
2
c 

0

Điều này sẽ làm rõ thêm các điểm:

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

Đầu vào 3 Đầu ra m

Đầu vào -3 Đầu ra p


0

Tôi nghĩ điều này rõ ràng hơn là mô tả nó bằng lời

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.