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:
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
>>>
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.
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'
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]
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".
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
Đ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
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'