Rút gọn Chuỗi trong Python (string compression) | Laptrinhcanban.com

HOME › >>

Rút gọn Chuỗi trong Python (string compression)

Rút gọn chuỗi (string compression) là một trong những vấn đề thường gặp trong lập trình khi bạn cần biểu diễn một chuỗi dài bằng một phiên bản ngắn gọn hơn. Python cung cấp nhiều cách để thực hiện việc này, và trong bài viết này, chúng ta sẽ tìm hiểu về các phương pháp rút gọn chuỗi trong Python.

Sử dụng vòng lặp for

Một cách đơn giản để rút gọn chuỗi là sử dụng một vòng lặp for để duyệt qua chuỗi ban đầu và đếm số lần xuất hiện của từng ký tự. Sau đó, bạn có thể xây dựng chuỗi rút gọn bằng cách kết hợp ký tự và số lần xuất hiện tương ứng.

def compress_string(input_string):
compressed = ""
count = 1
for i in range(1, len(input_string)):
if input_string[i] == input_string[i - 1]:
count += 1
else:
compressed += input_string[i - 1] + str(count)
count = 1
compressed += input_string[-1] + str(count)
return compressed if len(compressed) < len(input_string) else input_string

Chúng ta có thể gọi hàm trên để rút gọn chuỗi dài ban đầu bằng một phiên bản ngắn gọn hơn:

my_string = "aabbcccdddd"
my_compress_string = compress_string(my_string)
print(my_compress_string)

Kết quả:

a2b2c3d4

Sử dụng itertools.groupby

Thư viện itertools trong Python cung cấp một công cụ mạnh mẽ để nhóm các phần tử liên tiếp trong một chuỗi. Bằng cách sử dụng groupby, bạn có thể dễ dàng tạo một chuỗi rút gọn từ chuỗi ban đầu.

from itertools import groupby

def compress_string(input_string):
compressed = ""
for key, group in groupby(input_string):
compressed += key + str(len(list(group)))
return compressed if len(compressed) < len(input_string) else input_string

Chúng ta có thể gọi hàm trên để rút gọn chuỗi dài ban đầu bằng một phiên bản ngắn gọn hơn:

my_string = "aabbcccdddd"
my_compress_string = compress_string(my_string)
print(my_compress_string)

Kết quả:

a2b2c3d4

Sử dụng biểu thức chính quy (regular expressions)

Biểu thức chính quy là một công cụ mạnh mẽ để thực hiện các phân tích và biến đổi chuỗi. Bạn có thể sử dụng biểu thức chính quy để tìm kiếm và rút gọn chuỗi.

import re

def compress_string(input_string):
pattern = re.compile(r"(.)\1*")
compressed = ""
for match in pattern.finditer(input_string):
compressed += match.group(1) + str(len(match.group(0)))
return compressed if len(compressed) < len(input_string) else input_string

Chúng ta có thể gọi hàm trên để rút gọn chuỗi dài ban đầu bằng một phiên bản ngắn gọn hơn:

my_string = "aabbcccdddd"
my_compress_string = compress_string(my_string)
print(my_compress_string)

Kết quả:

a2b2c3d4

Sử dụng đệ quy

Bạn cũng có thể sử dụng phương pháp đệ quy để rút gọn chuỗi bằng cách xử lý từng phần của chuỗi ban đầu.

def compress_string(input_string):
if not input_string:
return ""

count = 1
while count < len(input_string) and input_string[count] == input_string[0]:
count += 1

compressed = input_string[0] + str(count)
compressed += compress_string(input_string[count:])

return compressed if len(compressed) < len(input_string) else input_string

Chúng ta có thể gọi hàm trên để rút gọn chuỗi dài ban đầu bằng một phiên bản ngắn gọn hơn:

my_string = "aabbcccdddd"
my_compress_string = compress_string(my_string)
print(my_compress_string)

Kết quả:

a2b2c3d4

Sử dụng OrderedDict

Một cách khác để rút gọn chuỗi là sử dụng OrderedDict từ thư viện collections để duyệt qua chuỗi và đếm số lần xuất hiện của mỗi ký tự.

from collections import OrderedDict

def compress_string(input_string):
char_count = OrderedDict()
for char in input_string:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1

compressed = "".join([char + str(count) for char, count in char_count.items()])
return compressed if len(compressed) < len(input_string) else input_string

Chúng ta có thể gọi hàm trên để rút gọn chuỗi dài ban đầu bằng một phiên bản ngắn gọn hơn:

my_string = "aabbcccdddd"
my_compress_string = compress_string(my_string)
print(my_compress_string)

Kết quả:

a2b2c3d4

Kết luận

Trên đây Kiyoshi đã hướng dẫn bạn về Rút gọn chuỗi (string compression) trong python rồi. Các phương pháp trên đều cho kết quả tương tự, nhưng bạn có thể lựa chọn cách nào phù hợp nhất với nhu cầu của bạn. Rút gọn chuỗi là một thủ thuật quan trọng trong lập trình và có thể được áp dụng trong nhiều tình huống khác nhau.

URL Link

https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/thao-tac-voi-chuoi-string-trong-python/rut-gon-chuoi-trong-python-string-compression/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.