Làm cách nào để so sánh hai ký tự trong một chuỗi trong python?
Trong bài viết này, chúng ta sẽ tìm hiểu cách so sánh hai chuỗi ký tự theo từng ký tự trong Python bằng 3 cách khác nhau Show
Mục lục 1. So sánh hai chuỗi ký tự theo ký tự bằng cách sử dụng For LoopCách đầu tiên để so sánh hai chuỗi ký tự theo từng ký tự là sử dụng vòng lặp for Đầu tiên kiểm tra xem độ dài của 2 chuỗi có bằng nhau không. Nếu không thì trả về Sai . Nếu độ dài bằng nhau thì tiếp tục so sánh. Nếu tất cả các ký tự đều bằng nhau thì trả về True ngược lại trả về Sai .
đầu ra True 2. So sánh hai chuỗi ký tự theo ký tự bằng cách sử dụng Vòng lặp WhileCách thứ hai để so sánh hai chuỗi ký tự theo ký tự là sử dụng vòng lặp while Một lần nữa, chúng tôi thực hiện theo cách tương tự như chúng tôi đã làm ở trên nhưng lần này chúng tôi sử dụng vòng lặp while . Tạo một biến i và khởi tạo biến đó thành 0 . Điều này sẽ được sử dụng để lặp qua các chuỗi. Kiểm tra độ dài của 2 chuỗi có bằng nhau không. Nếu không thì trả về Sai . Nếu độ dài bằng nhau thì tiếp tục so sánh. Nếu tất cả các ký tự đều bằng nhau thì trả về True ngược lại trả về Sai .
đầu ra True 3. So sánh hai chuỗi ký tự theo ký tự bằng cách sử dụng ZipCách thứ ba để so sánh hai chuỗi ký tự theo từng ký tự là sử dụng phương thức zip() . Phương thức zip() trả về một đối tượng zip là một bộ lặp của các bộ. Mỗi bộ chứa phần tử thứ n của mỗi danh sách. Bộ dữ liệu có thể được giải nén để tách các phần tử. Ví dụ: nếu hai chuỗi là "Xin chào" và "Thế giới", then the zip object will be: [('H', 'W'), ('e', 'o'), ('l', 'r'), ('l', 'd')] . . Hãy sử dụng đối tượng zip này để so sánh hai chuỗi ký tự theo ký tự
báo cáo quảng cáo này Phần kết luậnSo sánh hai chuỗi ký tự theo từng ký tự trong Python đến đây là kết thúc bài viết ngắn này Tìm hiểu chi tiết so sánh chuỗi trong python Hướng dẫn cách kiểm tra 2 chuỗi bằng nhau hay giống nhau. Tìm hiểu cách tìm sự khác biệt giữa hai chuỗi. Thực hiện các phép so sánh phức tạp và hơn thế nữaMiguel Brito ·28 tháng 11 năm 2021·12 phút đọc Theo dõi bản tin của tôi và không bao giờ bỏ lỡ các bài viết sắp tới của tôi Chơi bài viết này Trình duyệt của bạn không hỗ trợ phần tử âm thanh. TỐC ĐỘ1X So sánh các chuỗi là một nhiệm vụ cơ bản phổ biến đối với bất kỳ ngôn ngữ lập trình nào Khi nói đến Python, có một số cách để làm điều đó. Cái tốt nhất sẽ luôn phụ thuộc vào trường hợp sử dụng, nhưng chúng tôi có thể thu hẹp chúng thành một số phù hợp nhất với mục tiêu này Trong bài viết này, chúng tôi sẽ làm chính xác điều đó Đến cuối hướng dẫn này, bạn sẽ học được
Đi nào So sánh các chuỗi sử dụng toán tử >>> name = 'John Jabocs Howard' >>> another_name = name >>> name is another_name True >>> yet_another_name = 'John Jabocs Howard' >>> name is yet_another_name False >>> id(name) 140142470447472 >>> id(another_name) 140142470447472 >>> id(yet_another_name) 140142459568816 2 và >>> name = 'John Jabocs Howard' >>> another_name = name >>> name is another_name True >>> yet_another_name = 'John Jabocs Howard' >>> name is yet_another_name False >>> id(name) 140142470447472 >>> id(another_name) 140142470447472 >>> id(yet_another_name) 140142459568816 3Cách đơn giản nhất để kiểm tra xem hai chuỗi có bằng nhau trong Python hay không là sử dụng toán tử 2. Và nếu bạn đang tìm kiếm điều ngược lại, thì 3 chính là thứ bạn cần. Đó là nó 2 và 3 là các toán tử boolean, nghĩa là chúng trả về True85 hoặc True86. Ví dụ: 2 trả về True85 nếu hai chuỗi khớp nhau và True86 nếu ngược lại 3Các toán tử này cũng phân biệt chữ hoa chữ thường, có nghĩa là các chữ hoa được xử lý khác nhau. Ví dụ bên dưới chỉ ra rằng, 40 bắt đầu bằng chữ hoa 41 trong khi 42 bắt đầu bằng chữ thường 43. Kết quả là Python trả về True86 khi so sánh chúng với 2True0 So sánh các chuỗi sử dụng toán tử >>> name = 'John Jabocs Howard' >>> another_name = name >>> name is another_name True >>> yet_another_name = 'John Jabocs Howard' >>> name is yet_another_name False >>> id(name) 140142470447472 >>> id(another_name) 140142470447472 >>> id(yet_another_name) 140142459568816 4Một cách khác để so sánh xem hai chuỗi có bằng nhau trong Python hay không là sử dụng toán tử 4. Tuy nhiên, kiểu so sánh mà nó thực hiện khác với 2. Toán tử 4 so sánh xem 2 chuỗi có giống nhau khôngTrong Python—và trong nhiều ngôn ngữ khác—chúng ta nói hai đối tượng là cùng một thể hiện nếu chúng là cùng một đối tượng trong bộ nhớ
Hình ảnh dưới đây cho thấy ví dụ này sẽ được thể hiện như thế nào trong bộ nhớ Như bạn thấy, chúng tôi đang so sánh danh tính, không phải nội dung. Các đối tượng có cùng danh tính thường có cùng tham chiếu và chia sẻ cùng một vị trí bộ nhớ. Hãy ghi nhớ điều đó khi sử dụng toán tử 4Comparing strings using the , = operatorsCách thứ ba để so sánh các chuỗi là theo thứ tự bảng chữ cái. Điều này rất hữu ích khi chúng ta cần xác định thứ tự từ điển của hai chuỗi Hãy xem một ví dụ True8 Để xác định thứ tự, Python so sánh các chuỗi char với char. Trong ví dụ của chúng tôi, ba chữ cái đầu tiên giống nhau True81, nhưng chữ cái tiếp theo thì không, True82 từ True83 đứng trước True84 từ True85 Điều quan trọng cần lưu ý là so sánh này phân biệt chữ hoa chữ thường. Python xử lý chữ hoa và chữ thường khác nhau. Ví dụ: nếu chúng ta thay đổi True86 thành True87, thì kết quả sẽ khác vì True88 đứng trước True89 4
True8 So sánh hai chuỗi bằng cách bỏ qua trường hợpĐôi khi chúng ta có thể cần so sánh hai chuỗi—một danh sách các chuỗi hoặc thậm chí một từ điển các chuỗi—bất kể trường hợp nào Đạt được điều đó sẽ phụ thuộc vào bảng chữ cái mà chúng ta đang xử lý. Đối với chuỗi ASCII, chúng ta có thể chuyển đổi cả hai chuỗi thành chữ thường bằng cách sử dụng 82 hoặc viết hoa bằng 83 và so sánh chúngĐối với các bảng chữ cái khác, chẳng hạn như tiếng Hy Lạp hoặc tiếng Đức, việc chuyển đổi thành chữ thường để làm cho chuỗi phân biệt chữ hoa chữ thường không phải lúc nào cũng hoạt động. Hãy xem một số ví dụ Giả sử chúng ta có một chuỗi bằng tiếng Đức tên là 84, có nghĩa là 85. Bạn cũng có thể viết cùng một từ mà không có 86, trong trường hợp này, từ đó trở thành 87. Nếu chúng ta cố gắng viết thường hoặc viết hoa, hãy xem điều gì sẽ xảy ra 8Điều đó xảy ra bởi vì một cuộc gọi đơn giản tới 82 sẽ không làm gì với 86. Dạng chữ thường của nó tương đương với 00 nhưng bản thân 86 có dạng và hình dạng giống nhau ở dạng chữ thường hoặc chữ hoaCách tốt nhất để bỏ qua chữ hoa chữ thường và thực hiện so sánh chuỗi không phân biệt chữ hoa chữ thường hiệu quả là sử dụng 02. Theo các tài liệu
Hãy xem điều gì sẽ xảy ra khi chúng ta sử dụng 02 thay thế 0Cách so sánh hai chuỗi và bỏ qua khoảng trắngĐôi khi bạn có thể muốn so sánh hai chuỗi bằng cách bỏ qua các ký tự khoảng trắng. Giải pháp tốt nhất cho vấn đề này phụ thuộc vào vị trí của khoảng trắng, liệu có nhiều khoảng trắng trong chuỗi hay không, v.v. Ví dụ đầu tiên chúng ta sẽ xem xét rằng sự khác biệt duy nhất giữa các chuỗi là một trong số chúng có khoảng trắng ở đầu và/hoặc ở cuối. Trong trường hợp này, chúng ta có thể cắt cả hai chuỗi bằng phương pháp 04 và sử dụng toán tử 2 để so sánh chúng 7Tuy nhiên, đôi khi bạn có một chuỗi có khoảng trắng ở khắp nơi, bao gồm nhiều khoảng trắng bên trong chuỗi. Nếu đúng như vậy thì 04 là không đủ 9Sau đó, cách khác là xóa các khoảng trắng trùng lặp bằng biểu thức chính quy. Phương thức này chỉ trả về các ký tự trùng lặp, vì vậy chúng ta vẫn cần loại bỏ các ký tự đầu và cuối True00 Hoặc nếu bạn không quan tâm đến các bản sao và muốn xóa mọi thứ, thì chỉ cần chuyển chuỗi trống làm đối số thứ hai cho 07True01 Phương pháp cuối cùng và cuối cùng là sử dụng bảng dịch. Giải pháp này là một giải pháp thay thế thú vị cho regex True02 Một điều thú vị về phương pháp này là nó cho phép loại bỏ không chỉ khoảng trắng mà cả các ký tự khác như dấu chấm câu. True03 Cách so sánh hai chuỗi cho giống nhau (khớp chuỗi mờ)Một trường hợp sử dụng so sánh chuỗi phổ biến khác là kiểm tra xem hai chuỗi có gần bằng nhau không. Trong nhiệm vụ này, chúng tôi quan tâm đến việc biết chúng giống nhau như thế nào thay vì so sánh sự bằng nhau của chúng Để dễ hiểu hơn, hãy xem xét một kịch bản khi chúng ta có hai chuỗi và chúng ta sẵn sàng bỏ qua lỗi chính tả. Thật không may, điều đó là không thể với toán tử 2Chúng ta có thể giải quyết vấn đề này theo hai cách khác nhau
Sử dụng >>> name = 'John Jabocs Howard' >>> another_name = name >>> name is another_name True >>> yet_another_name = 'John Jabocs Howard' >>> name is yet_another_name False >>> id(name) 140142470447472 >>> id(another_name) 140142470447472 >>> id(yet_another_name) 140142459568816 09 09 trong thư viện tiêu chuẩn có lớp 73 cung cấp phương thức 74 trả về phép đo độ tương tự của chuỗi dưới dạng phần trămGiả sử bạn có hai chuỗi giống nhau, chẳng hạn như 75 và 76. Sự khác biệt duy nhất giữa chúng là chữ cái cuối cùng. Hãy tưởng tượng rằng sự khác biệt này đủ nhỏ đối với bạn và bạn muốn bỏ qua nóBằng cách sử dụng 77, chúng tôi có thể nhận được tỷ lệ phần trăm mà chúng giống nhau và sử dụng số đó để xác nhận xem hai chuỗi có đủ giống nhau khôngTrue04 Trong ví dụ này, 73 cho chúng ta biết rằng hai chuỗi giống nhau 85%. Sau đó, chúng tôi có thể sử dụng số này làm ngưỡng và bỏ qua sự khác biệtTrue05 Có một vấn đề, mặc dù. Ngưỡng phụ thuộc vào độ dài của chuỗi. Ví dụ: hai chuỗi rất nhỏ, chẳng hạn như 79 và 90 sẽ khác nhau 50%True06 Vì vậy, việc thiết lập một ngưỡng phù hợp có thể khó khăn. Thay vào đó, chúng ta có thể thử một thuật toán khác, thuật toán đếm chuyển vị trí của các chữ cái trong một chuỗi. Và tin tốt là, có tồn tại một thuật toán như vậy, và đó là điều chúng ta sẽ thấy tiếp theo Sử dụng khoảng cách Damerau-LevenshteinThuật toán Damerau-Levenshtein đếm số lượng thao tác tối thiểu cần thiết để thay đổi chuỗi này thành chuỗi khác Nói cách khác, nó cho biết có bao nhiêu lần chèn, xóa hoặc thay thế một ký tự; Trong Python, chúng ta có thể sử dụng hàm 91 từ thư viện 70Hãy xem khoảng cách Damerau-Levenshtein là bao nhiêu cho ví dụ cuối cùng từ phần trước True07 Đó là 1. Vì vậy, điều đó có nghĩa là để chuyển đổi 93 thành 94, chúng ta cần 1 lần thay đổi. Còn ví dụ đầu tiên thì sao?True08 cũng là 1. Và điều đó rất có ý nghĩa, sau cùng chúng ta chỉ cần chỉnh sửa chữ cái cuối cùng để chúng bằng nhau Bằng cách này, chúng tôi có thể đặt ngưỡng dựa trên số lần thay đổi thay vì tỷ lệ True09 Cách so sánh hai chuỗi và trả về sự khác biệtĐôi khi chúng ta biết trước rằng hai chuỗi khác nhau và chúng ta muốn biết điều gì khiến chúng khác nhau. Nói cách khác, chúng tôi muốn có được "sự khác biệt" của họ Trong phần trước, chúng tôi đã sử dụng 09 như một cách để biết liệu hai chuỗi có đủ giống nhau hay không. Mô-đun này thực sự mạnh hơn thế và chúng ta có thể sử dụng nó để so sánh các chuỗi và chỉ ra sự khác biệt của chúngĐiều khó chịu là nó yêu cầu một danh sách các chuỗi thay vì chỉ một chuỗi. Sau đó, nó trả về một trình tạo mà bạn có thể sử dụng để nối thành một chuỗi và in sự khác biệt 0So sánh chuỗi không hoạt động?Trong phần này, chúng ta sẽ thảo luận về lý do tại sao phép so sánh chuỗi của bạn không hoạt động và cách khắc phục. Hai lý do chính dựa trên kinh nghiệm của tôi là
So sánh các chuỗi sử dụng >>> name = 'John Jabocs Howard' >>> another_name = name >>> name is another_name True >>> yet_another_name = 'John Jabocs Howard' >>> name is yet_another_name False >>> id(name) 140142470447472 >>> id(another_name) 140142470447472 >>> id(yet_another_name) 140142459568816 4 thay vì >>> name = 'John Jabocs Howard' >>> another_name = name >>> name is another_name True >>> yet_another_name = 'John Jabocs Howard' >>> name is yet_another_name False >>> id(name) 140142470447472 >>> id(another_name) 140142470447472 >>> id(yet_another_name) 140142459568816 2Điều này rất phổ biến đối với các nhà phát triển Python mới làm quen. Rất dễ sử dụng sai toán tử, đặc biệt khi so sánh các chuỗi Như chúng ta đã thảo luận trong bài viết này, chỉ sử dụng toán tử 4 nếu bạn muốn kiểm tra xem hai chuỗi có giống nhau khôngCó một khoảng trắng ở cuối dòng mới (>>> name = 'John Jabocs Howard' >>> another_name = name >>> name is another_name True >>> yet_another_name = 'John Jabocs Howard' >>> name is yet_another_name False >>> id(name) 140142470447472 >>> id(another_name) 140142470447472 >>> id(yet_another_name) 140142459568816 99)Điều này rất phổ biến khi đọc một chuỗi từ hàm True000. Bất cứ khi nào chúng tôi sử dụng chức năng này để thu thập thông tin, người dùng có thể vô tình thêm dấu cách Nếu bạn lưu trữ kết quả từ True000 trong một biến, bạn sẽ không dễ dàng nhận ra vấn đề 1Giải pháp ở đây là loại bỏ khoảng trắng khỏi chuỗi mà người dùng nhập vào rồi so sánh. Bạn có thể làm điều đó với bất kỳ nguồn đầu vào nào mà bạn không tin tưởng Phần kết luậnTrong hướng dẫn này, chúng ta đã thấy 8 cách khác nhau để so sánh các chuỗi trong Python và hai lỗi phổ biến nhất. Chúng ta đã thấy cách chúng ta có thể tận dụng các hoạt động khác nhau để thực hiện so sánh chuỗi và cách sử dụng các thư viện bên ngoài để thực hiện khớp chuỗi mờ điểm chính
Đó là nó cho ngày hôm nay, và tôi hy vọng bạn đã học được điều gì đó mới. Hẹn gặp lại bạn lần sau Các bài viết khác bạn có thể thích
|