Thứ tư, 28/09/2016 | 00:00 GMT+7

Cách lập chỉ mục và cắt chuỗi trong Python 3

Kiểu dữ liệu chuỗi Python là một chuỗi được tạo thành từ một hoặc nhiều ký tự riêng lẻ có thể bao gồm chữ cái, số, ký tự khoảng trắng hoặc ký hiệu. Bởi vì một chuỗi là một chuỗi, nó có thể được truy cập theo các cách giống như các kiểu dữ liệu dựa trên chuỗi khác, thông qua lập index và cắt.

Hướng dẫn này sẽ hướng dẫn bạn cách truy cập các chuỗi thông qua lập index , cắt chúng thông qua chuỗi ký tự của chúng và xem qua một số phương pháp đếm và vị trí ký tự.

Cách các chuỗi được lập index

Giống như kiểu dữ liệu danh sách có các mục tương ứng với số index , mỗi ký tự của chuỗi cũng tương ứng với số index , bắt đầu bằng số index 0.

Đối với chuỗi Sammy Shark! phân tích index trông như thế này:

S a m m y S h a r k !
0 1 2 3 4 5 6 7 số 8 9 10 11

Như bạn thấy , chữ S đầu tiên bắt đầu ở index 0 và chuỗi kết thúc ở index 11 với ! Biểu tượng.

Ta cũng nhận thấy rằng ký tự khoảng trắng giữa SammyShark cũng tương ứng với số index của chính nó. Trong trường hợp này, số index được liên kết với khoảng trắng là 5.

Dấu chấm than ( ! ) Cũng có số index được liên kết với nó. Bất kỳ ký hiệu hoặc dấu chấm câu nào khác, chẳng hạn như *#$&.;? , cũng là một ký tự và sẽ được liên kết với số index của chính nó.

Thực tế là mỗi ký tự trong một chuỗi Python có một số index tương ứng cho phép ta truy cập và thao tác các chuỗi theo những cách tương tự như ta có thể làm với các kiểu dữ liệu tuần tự khác.

Truy cập các ký tự bằng số index dương

Bằng cách tham chiếu số index , ta có thể tách biệt một trong các ký tự trong một chuỗi. Ta làm điều này bằng cách đặt các số index trong dấu ngoặc vuông. Hãy khai báo một chuỗi, in nó và gọi số index trong dấu ngoặc vuông:

ss = "Sammy Shark!" print(ss[4]) 
Output
y

Khi ta tham chiếu đến một số index cụ thể của một chuỗi, Python sẽ trả về ký tự ở vị trí đó. Vì chữ cái y nằm ở index số 4 của chuỗi ss = "Sammy Shark!" , khi ta in ss[4] ta nhận y là kết quả .

Số index cho phép ta truy cập các ký tự cụ thể trong một chuỗi.

Truy cập các ký tự bằng số index phủ định

Nếu ta có một chuỗi dài và ta muốn xác định một mục ở cuối, ta cũng có thể đếm ngược từ cuối chuỗi, bắt đầu từ số index -1 .

Đối với cùng một chuỗi Sammy Shark! phân tích index phủ định trông giống như sau:

S a m m y S h a r k !
-12 -11 -10 -9 -số 8 -7 -6 -5 -4 -3 -2 -1

Bằng cách sử dụng các số chỉ số âm, ta có thể in ra ký tự r , bằng cách tham chiếu đến vị trí của nó ở chỉ số -3, như sau:

print(ss[-3]) 
Output
r

Sử dụng số index âm có thể có lợi cho việc cô lập một ký tự đơn lẻ ở cuối một chuỗi dài.

Chuỗi cắt

Ta cũng có thể gọi ra một loạt các ký tự từ chuỗi. Giả sử ta chỉ muốn in từ Shark . Ta có thể thực hiện bằng cách tạo một lát cắt , là một chuỗi các ký tự trong một chuỗi ban đầu. Với các lát cắt, ta có thể gọi nhiều giá trị ký tự bằng cách tạo một dải số index được phân tách bằng dấu hai chấm [x:y] :

print(ss[6:11]) 
Output
Shark

Khi xây dựng một lát cắt, như trong [6:11] , số index đầu tiên là nơi lát bắt đầu (bao gồm) và số index thứ hai là nơi lát kết thúc (loại trừ), đó là lý do tại sao trong ví dụ của ta ở trên phạm vi có là số index sẽ xuất hiện ngay sau khi chuỗi kết thúc.

Khi cắt các chuỗi, ta đang tạo một chuỗi con , về cơ bản là một chuỗi tồn tại trong một chuỗi khác. Khi ta gọi ss[6:11] , ta đang gọi chuỗi con Shark tồn tại trong chuỗi Sammy Shark! .

Nếu ta muốn bao gồm một trong hai đầu của chuỗi, ta có thể bỏ qua một trong các số trong cú pháp string[n:n] . Ví dụ: nếu ta muốn in từ đầu tiên của chuỗi ss - “Sammy” - ta có thể thực hiện bằng cách nhập:

print(ss[:5]) 
Output
Sammy

Ta đã thực hiện điều này bằng cách bỏ qua số index trước dấu hai chấm trong cú pháp lát cắt và chỉ bao gồm số index sau dấu hai chấm, tham chiếu đến phần cuối của chuỗi con.

Để in một chuỗi con bắt đầu ở giữa một chuỗi và in đến cuối, ta có thể thực hiện bằng cách chỉ bao gồm số index trước dấu hai chấm, như sau:

print(ss[7:]) 
Output
hark!

Bằng cách chỉ bao gồm số index trước dấu hai chấm và để lại số index thứ hai ngoài cú pháp, chuỗi con sẽ đi từ ký tự của số index được gọi đến cuối chuỗi.

Bạn cũng có thể sử dụng số chỉ số âm để cắt chuỗi. Như ta đã xem qua trước đó, số index âm của một chuỗi bắt đầu từ -1 và đếm ngược từ đó cho đến khi ta đến đầu chuỗi. Khi sử dụng số index âm, ta sẽ bắt đầu với số thấp hơn trước vì nó xuất hiện trước đó trong chuỗi.

Hãy sử dụng hai số chỉ số âm để cắt chuỗi ss :

print(ss[-4:-1]) 
Output
ark

Chuỗi con "hòm" được in từ chuỗi "Sammy Shark!" bởi vì ký tự “a” xuất hiện ở vị trí số index -4 và ký tự “k” xuất hiện ngay trước vị trí số index -1.

Chỉ định Stride trong khi Slicing Strings

Cắt chuỗi có thể chấp nhận tham số thứ ba ngoài hai số index . Tham số thứ ba chỉ định sải chân , tham số này đề cập đến số lượng ký tự cần di chuyển về phía trước sau khi ký tự đầu tiên được truy xuất từ chuỗi. Lúc này, ta đã bỏ qua tham số bước và Python mặc định là bước bằng 1, để mọi ký tự giữa hai số index được truy xuất.

Hãy xem lại ví dụ ở trên in ra chuỗi con “Shark”:

print(ss[6:11]) 
Output
Shark

Ta có thể thu được kết quả tương tự bằng cách bao gồm tham số thứ ba với bước tiến 1:

print(ss[6:11:1]) 
Output
Shark

Vì vậy, bước đi 1 sẽ lấy mọi ký tự giữa hai số index của lát cắt. Nếu ta bỏ qua tham số bước đi thì Python sẽ mặc định bằng 1.

Thay vào đó, nếu ta tăng khoảng cách, ta sẽ thấy rằng các ký tự bị bỏ qua:

print(ss[0:12:2]) 
Output
SmySak

Việc chỉ định bước 2 làm tham số cuối cùng trong cú pháp Python ss[0:12:2] bỏ qua mọi ký tự khác. Hãy xem các ký tự được in màu đỏ:

S a m m y S h a r k !

Lưu ý ký tự khoảng trắng ở index số 5 cũng bị bỏ qua với khoảng cách 2 được chỉ định.

Nếu ta sử dụng một số lớn hơn cho thông số sải chân của bạn , ta sẽ có một chuỗi con nhỏ hơn đáng kể:

print(ss[0:12:4]) 
Output
Sya

Chỉ định sải chân 4 làm tham số cuối cùng trong cú pháp Python ss[0:12:4] chỉ in mỗi ký tự thứ tư. , hãy nhìn vào các ký tự được in màu đỏ:

S amm y Sh a rk!

Trong ví dụ này, ký tự khoảng trắng cũng bị bỏ qua.

Vì ta đang in toàn bộ chuỗi, ta có thể bỏ qua hai số index và giữ hai dấu hai chấm trong cú pháp để đạt được cùng một kết quả:

print(ss[::4]) 
Output
Sya

Bỏ qua hai số index và giữ lại dấu hai chấm sẽ giữ toàn bộ chuỗi nằm trong phạm vi, trong khi việc thêm tham số cuối cùng cho sải chân sẽ chỉ định số ký tự cần bỏ qua.

Ngoài ra, bạn có thể chỉ ra một giá trị số âm cho khoảng cách, mà ta có thể sử dụng để in chuỗi ban đầu theo thứ tự ngược lại nếu ta đặt khoảng cách thành -1:

print(ss[::-1]) 
Output
!krahS ymmaS

Hai dấu hai chấm không có tham số được chỉ định sẽ bao gồm tất cả các ký tự từ chuỗi ban đầu, khoảng cách 1 sẽ bao gồm mọi ký tự mà không bị bỏ qua và việc phủ định khoảng cách đó sẽ đảo ngược thứ tự của các ký tự.

Hãy làm điều này nhưng với sải bước là -2:

print(ss[::-2]) 
Output
!rh ma

Trong ví dụ này, ss[::-2] , ta đang xử lý toàn bộ chuỗi ban đầu vì không có số index nào được đưa vào các tham số và đảo ngược chuỗi qua bước âm. Ngoài ra, bằng cách có sải là -2, ta đang bỏ qua mọi chữ cái khác của chuỗi đảo ngược:

! k r a h S [khoảng trắng] y m m a S

Ký tự khoảng trắng được in trong ví dụ này.

Bằng cách chỉ định tham số thứ ba của cú pháp lát cắt Python, bạn đang chỉ ra bước của chuỗi con mà bạn đang kéo từ chuỗi ban đầu.

Phương pháp đếm

Trong khi ta đang suy nghĩ về các số index có liên quan tương ứng với các ký tự trong chuỗi, bạn nên xem qua một số phương pháp đếm chuỗi hoặc trả về số index . Điều này có thể hữu ích để giới hạn số lượng ký tự mà ta muốn chấp nhận trong biểu mẫu do user nhập hoặc so sánh các chuỗi. Giống như các kiểu dữ liệu tuần tự khác, các chuỗi có thể được đếm thông qua một số phương pháp.

Đầu tiên ta sẽ xem xét phương thức len() có thể lấy độ dài của bất kỳ kiểu dữ liệu nào là một chuỗi, cho dù có thứ tự hay không có thứ tự, bao gồm chuỗi, danh sách, bộ giá trịtừ điển .

Hãy in độ dài của chuỗi ss :

print(len(ss)) 
Output
12

Độ dài của chuỗi "Sammy Shark!" dài 12 ký tự, bao gồm ký tự khoảng trắng và biểu tượng dấu chấm than.

Thay vì sử dụng một biến, ta cũng có thể truyền một chuỗi ngay vào phương thức len() :

print(len("Let's print the length of this string.")) 
Output
38

Phương thức len() đếm tổng số ký tự trong một chuỗi.

Nếu ta muốn đếm số lần một ký tự cụ thể hoặc một chuỗi ký tự hiển thị trong một chuỗi, ta có thể làm như vậy với phương thức str.count() . Hãy làm việc với chuỗi ss = "Sammy Shark!" và đếm số lần ký tự “a” xuất hiện:

print(ss.count("a")) 
Output
2

Ta có thể tìm kiếm một nhân vật khác:

print(ss.count("s")) 
Output
0

Mặc dù ký tự “S” có trong chuỗi, điều quan trọng cần lưu ý là mỗi ký tự đều phân biệt chữ hoa chữ thường. Nếu ta muốn tìm kiếm tất cả các chữ cái trong một chuỗi dù chữ hoa, chữ thường, ta có thể sử dụng phương thức str.lower() để chuyển đổi chuỗi thành tất cả các chữ thường trước. Bạn có thể đọc thêm về phương pháp này trong “ Giới thiệu về các phương thức chuỗi trong Python 3 ”.

Hãy thử str.count() với một chuỗi ký tự:

likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile." print(likes.count("likes")) 
Output
3

Trong chuỗi likes , chuỗi ký tự tương đương với “lượt thích” xuất hiện 3 lần trong chuỗi ban đầu.

Ta cũng có thể tìm thấy một ký tự hoặc chuỗi ký tự xuất hiện ở vị trí nào trong một chuỗi. Ta có thể làm điều này với phương thức str.find() và nó sẽ trả về vị trí của ký tự dựa trên số index .

Ta có thể kiểm tra xem chữ “m” đầu tiên xuất hiện ở đâu trong chuỗi ss :

print(ss.find("m")) 
Ouput
2

Ký tự đầu tiên “m” xuất hiện ở vị trí chỉ số 2 trong chuỗi “Sammy Shark!” Ta có thể xem lại các vị trí số index của chuỗi ss ở trên .

Hãy kiểm tra xem chuỗi ký tự “thích” đầu tiên xảy ra ở đâu trong chuỗi likes :

print(likes.find("likes")) 
Ouput
6

Ví dụ đầu tiên của chuỗi ký tự “lượt thích” bắt đầu ở vị trí số index 6, đó là vị trí của ký tự l của chuỗi likes được định vị.

Điều gì sẽ xảy ra nếu ta muốn xem chuỗi “lượt thích” thứ hai bắt đầu từ đâu? Ta có thể làm điều đó bằng cách truyền tham số thứ hai cho phương thức str.find() sẽ bắt đầu từ một số index cụ thể. Vì vậy, thay vì bắt đầu ở đầu chuỗi, hãy bắt đầu sau số index 9:

print(likes.find("likes", 9)) 
Output
34

Trong ví dụ thứ hai này bắt đầu từ số index là 9, lần xuất hiện đầu tiên của chuỗi ký tự “lượt thích” bắt đầu ở chỉ số 34.

Ngoài ra, ta có thể chỉ định phần cuối cho phạm vi dưới dạng tham số thứ ba. Giống như cắt lát, ta có thể thực hiện bằng cách đếm ngược sử dụng số index âm:

print(likes.find("likes", 40, -6)) 
Output
64

Ví dụ cuối cùng này tìm kiếm vị trí của chuỗi “lượt thích” giữa các số index là 40 và -6. Vì tham số cuối cùng được nhập là số âm nên sẽ được đếm từ cuối chuỗi ban đầu.

Các phương thức chuỗi len() , str.count()str.find() được dùng để xác định độ dài, số lượng ký tự hoặc chuỗi ký tự và vị trí index của ký tự hoặc chuỗi ký tự trong chuỗi.

Kết luận

Việc có thể gọi các số index cụ thể của chuỗi hoặc một phần cụ thể của chuỗi cho phép ta linh hoạt hơn khi làm việc với kiểu dữ liệu này. Bởi vì chuỗi, như danh sách và bộ giá trị, là một kiểu dữ liệu dựa trên trình tự, nó có thể được truy cập thông qua lập index và cắt.

Bạn có thể đọc thêm về định dạng chuỗiphương pháp chuỗi để tiếp tục tìm hiểu về chuỗi.


Tags:

Các tin liên quan

Cách định dạng văn bản trong Python 3
2016-09-15
Giới thiệu về cách làm việc với chuỗi trong Python 3
2016-09-15
Hiểu các kiểu dữ liệu trong Python 3
2016-09-14
Python 2 và Python 3: Cân nhắc thực tế
2016-08-17
Cách triển khai các ứng dụng web Python với Khung Micro Chai trên Ubuntu 14.04
2015-10-19
Cách triển khai các ứng dụng web Python với Framework Micro Chai trên CentOS 7
2015-10-19
Cách triển khai ứng dụng Python Web2py với uWSGI và Nginx trên Ubuntu 14.04
2015-03-17
Cách triển khai các ứng dụng Python Web2py với uWSGI và Nginx trên CentOS 7
2015-03-17
Cách xác thực một ứng dụng Python với Twitter bằng Tweepy trên Ubuntu 14.04
2015-02-04
Cách gửi tin nhắn dựa trên các phím định tuyến bằng thư viện RabbitMQ và Puka Python
2014-02-26