2014-09-21 18 views
6

Tôi mới dùng python và tôi muốn biết làm cách nào để trao đổi hai ký tự trong một chuỗi. Tôi biết chuỗi là bất biến vì vậy tôi cần phải tìm một cách để tạo ra một chuỗi mới với các nhân vật hoán đổi. Cụ thể, một phương pháp chung có một chuỗi và hai chỉ số i, j và hoán đổi ký tự trên i với j.Hoán đổi các ký tự trong chuỗi

Trả lời

12

Khi bạn nói đúng, các chuỗi không thay đổi và không thể sửa đổi tại chỗ - nhưng chúng ta có thể tạo một chuỗi mới với các ký tự được hoán đổi. Dưới đây là một ý tưởng: chúng ta hãy chuyển đổi chuỗi thành một danh sách, trao đổi các yếu tố trong danh sách và sau đó chuyển đổi danh sách lại thành một chuỗi:

def swap(s, i, j): 
    lst = list(s); 
    lst[i], lst[j] = lst[j], lst[i] 
    return ''.join(lst) 

Một thi thể sẽ được xử lý chuỗi bằng lát và lập chỉ mục:

def swap(s, i, j): 
    return ''.join((s[:i], s[j], s[i+1:j], s[i], s[j+1:])) 

Dù bằng cách nào, nó hoạt động như mong đợi:

swap('abcde', 1, 3) 
=> 'adcbe' 
+0

Tuyệt vời, tôi đã nghĩ đến việc một số cách để làm điều đó thông qua một danh sách. Nó có hiệu quả về mặt thời gian không? bởi vì tôi phải đặt nó trong một chương trình quan trọng. – Wajahat

+0

@Wajahat Đủ tốt rồi. Tôi thích tùy chọn đầu tiên vì nó tạo ra các chuỗi trung gian hơn, nhưng như thường lệ thì tốt hơn nếu chúng ta cấu hình mã trước tiên trước khi cố gắng tối ưu hóa nó sớm. –

+0

Chỉ cần lưu ý cho bất kỳ ai muốn sử dụng mã này, cách thứ hai được thực hiện bằng các lát và chỉ mục không hoạt động đúng với các chỉ mục tiêu cực trong python3. Tôi khuyên bạn nên sử dụng phương pháp đầu tiên. – Mason

Các vấn đề liên quan