Thay thế chuỗi chỉ mục Python

Như chúng ta đã biết, các chuỗi trong Python là bất biến, vì vậy không có cách nào có thể trực tiếp thực hiện các thay đổi đối với chuỗi trong thời gian chạy mã Python. Tuy nhiên, cần phải làm điều này trong một số trường hợp và nó có thể được thực hiện gián tiếp theo những cách khác nhau

Hướng dẫn này trình bày cách thay thế một ký tự trong chuỗi tại một chỉ mục cụ thể trong Python

Sử dụng Cắt chuỗi để thay thế một ký tự trong chuỗi tại một chỉ mục nhất định trong Python

Cắt danh sách là một cách hiệu quả để giải quyết một số vấn đề gặp phải trong quá trình viết mã. Toán tử dấu hai chấm (:) được sử dụng cho quy trình cắt danh sách. Các chi tiết hoặc tham số như start, finishstep có thể được chỉ định với sự trợ giúp của toán tử dấu hai chấm

Đoạn mã sau sử dụng cắt chuỗi để thay thế một ký tự trong chuỗi tại một chỉ mục nhất định trong Python

stra = 'Meatloaf'
posn = 5
nc = 'x'

stra = string[:posn] + nc + string[posn+1:]
print(stra)

Đoạn mã trên cung cấp đầu ra sau

Giải trình

  • Để thay thế một ký tự đơn tại vị trí đã chỉ định trong chuỗi đã cho, ba phần được tạo bằng cách tách chuỗi đã cho
  • Phần ở giữa chỉ chứa ký tự cần thay thế. Phần đầu và phần cuối lần lượt chứa các ký tự trước và sau ký tự được chọn
  • Tất cả ba phần sau đó được nối với nhau bằng cách sử dụng toán tử + đơn giản. Tuy nhiên, thay vì phần giữa chứa ký tự được chọn, ký tự cần thay thế sẽ được nối vào vị trí của nó

Sử dụng Danh sách để thay thế một ký tự trong chuỗi tại một chỉ mục nhất định trong Python

Danh sách là một trong bốn kiểu dữ liệu tích hợp sẵn mà Python cung cấp và nó được sử dụng để lưu trữ một số mặt hàng trong một biến duy nhất. Danh sách được sắp xếp theo thứ tự, có thể thay đổi và có số lượng xác định

Trong phương thức này, chuỗi đã cho trước tiên được chuyển đổi thành một danh sách. Sau đó, ký tự cũ được thay thế bằng ký tự mới tại chỉ mục đã chỉ định. Cuối cùng, các mục trong danh sách được chuyển đổi thành một chuỗi bằng cách sử dụng hàm join()

Đoạn mã sau sử dụng Danh sách để thay thế một ký tự trong chuỗi tại một chỉ mục nhất định trong Python

stra = 'Meatloaf'
posn = 6
nc = 'x'
tmp = list(stra)
tmp[posn] = nc
stra = "".join(tmp)
print(stra)

Đoạn mã trên cung cấp đầu ra sau

Đây là hai phương thức có thể được sử dụng để xử lý một ký tự trong một chuỗi. Tiếp tục, bây giờ chúng ta sẽ tập trung vào việc thay thế các ký tự tại nhiều chỉ mục được chỉ định

Thay thế nhiều hơn một ký tự ở các chỉ số khác nhau bằng cùng một ký tự trong tất cả các trường hợp

Ở đây, chúng tôi sẽ sử dụng Danh sách. Phương pháp này được sử dụng khi có một vài chỉ mục và tất cả các ký tự tại nhiều chỉ mục này cần được thay thế bằng một ký tự

Để điều này hoạt động, tất cả các chỉ mục trong danh sách đã cho sẽ cần phải được lặp lại và có thể thực hiện cắt lát để thay thế từng chỉ mục tìm thấy yêu cầu thay đổi ký tự

Đoạn mã sau sử dụng cắt danh sách khi chúng ta cần thay thế các ký tự ở nhiều chỉ mục bằng một ký tự

stra = 'Meatloaf'
loi = [2, 4, 6]
nc = 'x'
res = ''

for i in loi:
    stra = stra[:i] + nc + stra[i+1:]

print(stra)

Đoạn mã trên cung cấp đầu ra sau

Thay thế nhiều hơn một ký tự ở các chỉ số khác nhau bằng các ký tự khác nhau trong tất cả các trường hợp

Trong trường hợp này, không cần thay thế cùng một ký tự trong tất cả các chỉ số

Với mục đích này, chúng tôi sẽ sử dụng từ điển thay vì danh sách. Một từ điển tương tự như một

stra = 'Meatloaf'
posn = 6
nc = 'x'
tmp = list(stra)
tmp[posn] = nc
stra = "".join(tmp)
print(stra)
0 và lưu trữ dữ liệu đã nhập dưới dạng các cặp
stra = 'Meatloaf'
posn = 6
nc = 'x'
tmp = list(stra)
tmp[posn] = nc
stra = "".join(tmp)
print(stra)
1

Để thay thế tất cả các ký tự được cung cấp trong các chỉ mục đã chọn bằng ký tự thay thế tương ứng của chúng, hãy lặp lại tất cả các cặp

stra = 'Meatloaf'
posn = 6
nc = 'x'
tmp = list(stra)
tmp[posn] = nc
stra = "".join(tmp)
print(stra)
1 của từ điển đã tạo

Chuỗi là một trong những loại dữ liệu cần thiết nhất trong Lập trình và là loại mà mọi nhà phát triển nên biết. Có nhiều cách khác nhau để thao tác với chuỗi python và có nhiều hàm và phương thức cho phép bạn thực hiện điều đó một cách dễ dàng

Trong bài viết này, bạn sẽ tìm hiểu cách thay thế chuỗi trong chuỗi python bằng phương thức replace() và xây dựng hàm thay thế của riêng bạn

Chuỗi là gì?

Chuỗi python là một tập hợp các ký tự và một ký tự là một chữ cái hoặc ký hiệu. Ví dụ. 'a' hoặc

string.replace(old, new, count)
0. Trong Python, ký tự cũng là chuỗi

Chuỗi giống như mảng/danh sách trong Python, nhưng chúng không thay đổi. Vì vậy, thao tác với chuỗi luôn tốn thêm dung lượng

Chuỗi cũng tuân theo lập chỉ mục dựa trên số 0 giống như mảng, cho phép chúng tôi lấy các ký tự cụ thể từ chuỗi. Ví dụ

>>> s = "apple"
>>> s[0]
'a'
>>> s[2]
'p'
>>> 

Làm cách nào để thay thế một ký tự trong một chuỗi trong Python?

Phương thức chuỗi

string.replace(old, new, count)
1 cho phép chúng ta thay thế tất cả các lần xuất hiện của một ký tự cụ thể old trong chuỗi python bằng một ký tự mới khác. Cú pháp thay thế() là

string.replace(old, new, count)

Bây giờ hãy xem một ví dụ sử dụng phương thức replace()

>>> s = "apple"
>>> s.replace('a', 'Z')
'Zpple'
>>> s.replace('p', 'W')
'aWWle'
>>> s
'apple'
>>> 

Ở đây, chúng ta có một chuỗi python s. Đầu tiên, chúng tôi thay thế ký tự 'a' bằng 'Z' và tiếp theo, chúng tôi thay thế 'p' bằng 'W', thay đổi tất cả các lần xuất hiện của 'p' bằng 'W'. Lưu ý, không thao tác nào thay đổi chuỗi ban đầu nhưng tạo ra một chuỗi mới với các thay đổi

Theo mặc định, phương thức replace() thay thế tất cả các lần xuất hiện của một ký tự, nhưng bằng cách sử dụng tham số đếm tùy chọn, chúng ta có thể chọn số lần xuất hiện của ký tự mà chúng ta muốn thay thế. Tham số đếm sẽ thay thế một số ký tự nhất định bắt đầu từ đầu chuỗi thay thế

>>> s.replace('p', 'W', 1)
'aWple'
>>> s1 = "appppple"
>>> s2 = "appapple"
>>> 
>>> s1.replace('p', 'W',  3)
'aWWWpple'
>>> s2.replace('p', 'W',  3)
'aWWaWple'

Tại đây, bạn có thể thấy đầu ra của tham số đếm cho các loại chuỗi khác nhau

Làm cách nào để thay thế một ký tự trong chuỗi trong Python mà không sử dụng phương thức thay thế?

Nếu không muốn sử dụng phương thức thay thế, chúng ta có thể dễ dàng xây dựng hàm Python của riêng mình để thay thế một ký tự trong chuỗi

Một cách tiếp cận hiệu quả là duyệt qua mọi ký tự trong chuỗi python và thay thế nó bằng ký tự mới

Chức năng sẽ trông như thế này

def myReplace(string, old, new):
    newStr = list(string)
    for i in range(len(newStr)):
        if newStr[i] == old:
            newStr[i] = new
    return "".join(newStr)
>>> myReplace('apple', 'p', 'W')
'aWWle'

Ở đây, trước tiên chúng tôi chuyển đổi chuỗi thành một mảng, vì một chuỗi là bất biến và chúng tôi muốn có thể thay đổi các ký tự một cách dễ dàng. Tiếp theo, chúng tôi lặp qua mọi chỉ mục trong chuỗi và nếu ký tự tại chỉ mục đó bằng ký tự cũ, chúng tôi sẽ thay thế nó bằng ký tự mới. Cuối cùng, chúng tôi chuyển đổi mảng của mình trở lại thành một chuỗi bằng phương thức nối. Đây là một cách tiếp cận rất hiệu quả với độ phức tạp thời gian O(n) và độ phức tạp không gian O(n)

Tuy nhiên, chúng ta có thể thêm tham số đếm vào hàm này, giống như trong phương thức thay thế() ban đầu. Chúng tôi có thể chỉ cần đếm xem chúng tôi đã thay thế bao nhiêu ký tự và dừng lại khi chúng tôi thay thế các ký tự đếm

def myReplace(string, old, new, count=float('inf')):
    newStr = list(string)
    for i in range(len(newStr)):
        if newStr[i] == old:
            newStr[i] = new
            count -= 1
        if count == 0:
            break
    return "".join(newStr)
>>> myReplace('apple', 'p', 'W')
'aWWle'
>>> myReplace('apple', 'p', 'W', 1)
'aWple'
>>> myReplace('apple', 'p', 'W', 2)
'aWWle'
>>> myReplace('apple', 'p', 'W', 5)
'aWWle'
>>> 

Theo mặc định, chúng tôi giữ số lượng là vô cùng, vì vậy tất cả các ký tự sẽ được thay thế nếu không có số lượng nào được đưa ra. Mỗi lần, ký tự cũ được tìm thấy, số lượng giảm đi 1. Khi đếm về 0, vòng lặp sẽ ngắt, đảm bảo không có ký tự nào khác bị thay đổi. Hiệu quả của phương pháp này cũng giống như các phương pháp khác

Làm cách nào để bạn thay thế nhiều ký tự trong một chuỗi bằng Python?

Phương thức replace() thậm chí còn cho phép chúng ta thay thế toàn bộ chuỗi con bằng một chuỗi con khác trong một chuỗi. Chúng ta hãy xem xét một số ví dụ

>>> s = 'abcdef'
>>> s.replace('bcd', 'ghik')
'aghikef'
>>>
>>> s = 'abcdefgbcd'
>>> s.replace('bcd', 'ghik')
'aghikefgghik'
>>> s.replace('bcd', 'ghik', 1)
'aghikefgbcd'
>>> 

Ở đây, chúng ta có một chuỗi s và phương thức thay thế có thể thay thế chuỗi con 'bcd' bằng 'ghik', trả về một chuỗi mới. Sau đó, chúng tôi làm tương tự với một chuỗi khác, nhưng 'bcd' xuất hiện hai lần trong chuỗi, vì vậy cả hai lần xuất hiện đều được thay thế. Cuối cùng, sử dụng tham số đếm, chúng ta chỉ có thể thay thế lần xuất hiện đầu tiên của 'bcd'

Thay thế các chuỗi con theo cùng một khái niệm như thay thế các ký tự đơn

Tóm lược

Trong bài viết này, bạn đã học cách thay thế các ký tự trong một chuỗi bằng Python bằng cách sử dụng phương thức replace() và bằng cách xây dựng hàm thay thế hiệu quả của riêng bạn

Đầu tiên, bạn đã biết chuỗi là gì, các ký tự trong Python là gì và chuỗi rất giống với mảng như thế nào. Tiếp theo, bạn đã biết chức năng của phương thức replace(), cú pháp, tham số và hành vi mặc định của nó mà bạn có thể thay đổi bằng cách sử dụng tham số đếm. Sau đó, bạn đã hiểu cách bạn có thể triển khai hàm thay thế của riêng mình, sử dụng vòng lặp for đơn giản, và sau đó bạn đã biết cách chúng ta thậm chí có thể thêm tính năng đếm vào hàm của mình để làm cho nó giống với hàm replace() ban đầu. Cuối cùng, bạn đã học được rằng phương thức replace() không chỉ có thể thay thế các ký tự trong một chuỗi mà còn có thể thay thế toàn bộ chuỗi con bằng một chuỗi con khác một cách dễ dàng

Bước tiếp theo

Để tìm hiểu thêm về những kiến ​​thức cơ bản về Python, mã hóa và phát triển phần mềm, hãy xem Sách hướng dẫn cơ bản về mã hóa dành cho nhà phát triển của chúng tôi, nơi chúng tôi đề cập đến các ngôn ngữ, khái niệm và công cụ thiết yếu mà bạn sẽ cần để trở thành một nhà phát triển chuyên nghiệp

Cảm ơn và mã hóa hạnh phúc. Chúng tôi hy vọng bạn thích bài viết này. Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, vui lòng liên hệ với jacob@initialcommit. io