5 thủ thuật Python giúp xử lý dữ liệu nhanh và viết code gọn hơn

  • Home
  • 5 thủ thuật Python giúp xử lý dữ liệu nhanh và viết code gọn hơn

Ở bài trước, chúng ta đã tìm hiểu một số thủ thuật Python cơ bản như enumerate(), Counter, set và cách kiểm tra nhiều giá trị bằng in.

Trong bài viết này, hãy tiếp tục với 5 kỹ thuật rất hữu ích khi làm việc với list, dữ liệu và các vòng lặp trong Python.

Đây đều là những tính năng có sẵn trong Python và có thể giúp code ngắn hơn mà vẫn dễ đọc.

1. Sử dụng zip() để duyệt nhiều danh sách cùng lúc

Giả sử chúng ta có hai danh sách chứa tên và tuổi:

names = ["An", "Bình", "Chi"]
ages = [25, 30, 28]

Nếu không sử dụng zip(), bạn có thể phải làm như sau:

for i in range(len(names)):
    print(names[i], ages[i])

Python cung cấp zip() để giải quyết vấn đề này:

for name, age in zip(names, ages):
    print(name, age)

Kết quả:

An 25
Bình 30
Chi 28

Tạo dictionary bằng zip()

zip() còn rất tiện khi cần kết hợp hai danh sách thành một dictionary:

names = ["An", "Bình", "Chi"]
ages = [25, 30, 28]

users = dict(zip(names, ages))

print(users)

Kết quả:

{
    "An": 25,
    "Bình": 30,
    "Chi": 28
}

Lưu ý

Nếu hai danh sách có độ dài khác nhau, zip() mặc định sẽ dừng khi danh sách ngắn hơn kết thúc.

Ví dụ:

names = ["An", "Bình", "Chi"]
ages = [25, 30]

print(list(zip(names, ages)))

Kết quả:

[("An", 25), ("Bình", 30)]

zip() đặc biệt hữu ích khi xử lý dữ liệu từ CSV, API hoặc các danh sách có cấu trúc tương ứng.

2. Dùng any() để kiểm tra có ít nhất một phần tử thỏa điều kiện

Giả sử cần kiểm tra xem danh sách có chứa số âm hay không.

Cách thông thường:

numbers = [1, 2, -3, 4]

found = False

for number in numbers:
    if number < 0:
        found = True
        break

if found:
    print("Có số âm")

Python có thể làm việc này ngắn gọn hơn với any():

numbers = [1, 2, -3, 4]

if any(number < 0 for number in numbers):
    print("Có số âm")

any() trả về True nếu ít nhất một phần tử trong iterable có giá trị đúng.

Ví dụ kiểm tra danh sách user

users = [
    {"name": "An", "active": False},
    {"name": "Bình", "active": False},
    {"name": "Chi", "active": True}
]

if any(user["active"] for user in users):
    print("Có user đang hoạt động")

Cách viết này rất phù hợp khi chỉ cần biết có tồn tại ít nhất một trường hợp hay không.

3. Dùng all() để kiểm tra tất cả phần tử

Ngược lại với any(), all() trả về True khi tất cả phần tử đều thỏa điều kiện.

Ví dụ:

numbers = [2, 4, 6, 8]

if all(number % 2 == 0 for number in numbers):
    print("Tất cả đều là số chẵn")

Kết quả:

Tất cả đều là số chẵn

Nếu danh sách chứa một số lẻ:

numbers = [2, 4, 5, 8]

if all(number % 2 == 0 for number in numbers):
    print("Tất cả đều là số chẵn")
else:
    print("Có số lẻ")

Kết quả:

Có số lẻ

Ví dụ kiểm tra dữ liệu người dùng

users = [
    {"name": "An", "age": 25},
    {"name": "Bình", "age": 30},
    {"name": "Chi", "age": 28}
]

if all(user["age"] >= 18 for user in users):
    print("Tất cả user đều đủ tuổi")

all() rất hữu ích khi kiểm tra dữ liệu trước khi thực hiện một thao tác tiếp theo.

4. Sử dụng List Comprehension để tạo list

List comprehension là một trong những tính năng Python được sử dụng rất phổ biến.

Ví dụ, muốn tạo danh sách bình phương:

numbers = [1, 2, 3, 4, 5]

squares = []

for number in numbers:
    squares.append(number ** 2)

print(squares)

Có thể viết ngắn gọn thành:

numbers = [1, 2, 3, 4, 5]

squares = [number ** 2 for number in numbers]

print(squares)

Kết quả:

[1, 4, 9, 16, 25]

Kết hợp điều kiện

Bạn cũng có thể thêm điều kiện vào list comprehension:

numbers = [1, 2, 3, 4, 5, 6]

even_numbers = [
    number
    for number in numbers
    if number % 2 == 0
]

print(even_numbers)

Kết quả:

[2, 4, 6]

Xử lý dữ liệu thực tế

Ví dụ lấy danh sách email từ dữ liệu user:

users = [
    {"name": "An", "email": "an@example.com"},
    {"name": "Bình", "email": "binh@example.com"},
    {"name": "Chi", "email": "chi@example.com"}
]

emails = [user["email"] for user in users]

print(emails)

Kết quả:

[
    "an@example.com",
    "binh@example.com",
    "chi@example.com"
]

List comprehension đặc biệt hữu ích khi xử lý dữ liệu API, JSON, scraping hoặc Pandas.

Tuy nhiên, không nên biến một list comprehension thành một đoạn code quá phức tạp. Khi logic khó đọc, một vòng for thông thường đôi khi lại là lựa chọn tốt hơn.


5. Unpacking với * giúp xử lý list linh hoạt

Python cho phép lấy nhiều giá trị từ một list bằng unpacking.

Ví dụ:

numbers = [1, 2, 3]

a, b, c = numbers

print(a)
print(b)
print(c)

Kết quả:

1
2
3

Nhưng nếu không biết chính xác có bao nhiêu phần tử thì sao?

Bạn có thể sử dụng *:

numbers = [1, 2, 3, 4, 5]

first, *middle, last = numbers

print(first)
print(middle)
print(last)

Kết quả:

1
[2, 3, 4]
5

Trong trường hợp này:

  • first nhận phần tử đầu tiên.
  • last nhận phần tử cuối cùng.
  • middle nhận tất cả phần tử ở giữa.

Một ví dụ thực tế

Giả sử có URL được tách thành nhiều phần:

parts = [
    "api",
    "users",
    "123",
    "posts"
]

first, *path, last = parts

print(first)
print(path)
print(last)

Kết quả:

api
['users', '123']
posts

Unpacking khi truyền tham số

Dấu * còn có thể được sử dụng để truyền các phần tử của list vào function:

numbers = [10, 20, 30]

print(max(*numbers))

Tương đương:

print(max(10, 20, 30))

Bạn cũng có thể sử dụng unpacking để nối list:

a = [1, 2, 3]
b = [4, 5, 6]

result = [*a, *b]

print(result)

Kết quả:

[1, 2, 3, 4, 5, 6]

Đây là một cách rất linh hoạt để thao tác với dữ liệu trong Python.

Khi nào nên sử dụng các thủ thuật này?

Mỗi kỹ thuật phù hợp với một tình huống khác nhau:

Thủ thuật Sử dụng khi
zip() Duyệt hoặc kết hợp nhiều danh sách
any() Kiểm tra ít nhất một phần tử
all() Kiểm tra tất cả phần tử
List comprehension Tạo hoặc biến đổi list
Unpacking * Lấy hoặc kết hợp nhiều giá trị

Ví dụ, khi xử lý dữ liệu API, bạn có thể kết hợp nhiều kỹ thuật:

users = [
    {"name": "An", "age": 25, "active": True},
    {"name": "Bình", "age": 30, "active": False},
    {"name": "Chi", "age": 28, "active": True}
]

names = [user["name"] for user in users]

has_active_user = any(
    user["active"]
    for user in users
)

all_adults = all(
    user["age"] >= 18
    for user in users
)

print(names)
print(has_active_user)
print(all_adults)

Kết quả:

['An', 'Bình', 'Chi']
True
True

Chỉ với vài dòng code, chúng ta có thể thực hiện nhiều thao tác xử lý dữ liệu.

Kết luận

Python cung cấp rất nhiều công cụ nhỏ nhưng mạnh để giúp developer viết code hiệu quả hơn.

Trong bài viết này, chúng ta đã tìm hiểu:

  • zip() để xử lý nhiều danh sách cùng lúc.
  • any() để kiểm tra một điều kiện có xuất hiện hay không.
  • all() để kiểm tra toàn bộ dữ liệu.
  • List comprehension để tạo và biến đổi list.
  • Unpacking với * để xử lý dữ liệu linh hoạt.

Điểm quan trọng là không nên sử dụng các thủ thuật này chỉ để làm code ngắn hơn. Hãy sử dụng chúng khi chúng giúp ý định của code trở nên rõ ràng hơn.

Một đoạn code Python tốt không nhất thiết phải có ít dòng nhất. Quan trọng hơn là developer khác có thể đọc và hiểu nó một cách nhanh chóng.

Ở bài tiếp theo trong series Python Tips & Tricks, chúng ta có thể tiếp tục với các thủ thuật thực tế về dictionary, xử lý chuỗi, JSON, file và API trong Python.

Categories:

Leave Comment

Tháng 9 2026
H B T N S B C
 123456
78910111213
14151617181920
21222324252627
282930