5 thủ thuật Python đơn giản giúp code ngắn gọn và hiệu quả hơn

  • Home
  • 5 thủ thuật Python đơn giản giúp code ngắn gọn và hiệu quả hơn

Python được yêu thích không chỉ vì cú pháp dễ học mà còn bởi ngôn ngữ này cung cấp rất nhiều tính năng giúp developer viết code ngắn gọn, rõ ràng và dễ bảo trì.

Một số thủ thuật Python tưởng như rất nhỏ nhưng có thể giúp bạn giảm đáng kể lượng code phải viết trong các dự án thực tế.

Trong bài viết này, chúng ta sẽ cùng tìm hiểu 5 thủ thuật Python đơn giản nhưng cực kỳ hữu ích mà developer nên biết.

1. Hoán đổi hai biến mà không cần biến tạm

Trong nhiều ngôn ngữ lập trình, khi muốn hoán đổi giá trị của hai biến, chúng ta thường phải sử dụng một biến trung gian.

Ví dụ:

a = 10
b = 20

temp = a
a = b
b = temp

print(a)
print(b)

Python cho phép thực hiện việc này đơn giản hơn rất nhiều:

a = 10
b = 20

a, b = b, a

print(a)  # 20
print(b)  # 10

Đây là một tính năng được gọi là multiple assignment.

Python sẽ tự xử lý việc đóng gói và unpacking các giá trị trong phép gán.

Khi nào thủ thuật này hữu ích?

Nó đặc biệt tiện khi cần:

  • Hoán đổi vị trí hai phần tử.
  • Sắp xếp dữ liệu.
  • Xử lý các thuật toán.
  • Thay đổi thứ tự biến trong một đoạn code.

Ví dụ:

x = 100
y = 200
z = 300

x, y, z = z, x, y

print(x)  # 300
print(y)  # 100
print(z)  # 200

Không cần một biến tạm nào.

2. Kiểm tra nhiều giá trị bằng in

Một đoạn code thường gặp:

status = "pending"

if status == "pending" or status == "processing" or status == "completed":
    print("Valid status")

Đoạn code này hoạt động, nhưng khá dài và khó đọc khi số lượng điều kiện tăng lên.

Python cung cấp toán tử in để giải quyết vấn đề này:

status = "pending"

if status in ("pending", "processing", "completed"):
    print("Valid status")

Code ngắn hơn và thể hiện rõ ý nghĩa:

Kiểm tra xem status có nằm trong danh sách các giá trị hợp lệ hay không.

Sử dụng set khi có nhiều giá trị

Nếu danh sách giá trị lớn và bạn thường xuyên kiểm tra sự tồn tại của phần tử, có thể sử dụng set:

valid_statuses = {
    "pending",
    "processing",
    "completed",
    "cancelled"
}

if status in valid_statuses:
    print("Valid status")

set được thiết kế rất phù hợp cho các thao tác kiểm tra membership.

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

Giả sử API trả về trạng thái đơn hàng:

status = "shipped"

valid_statuses = {
    "pending",
    "processing",
    "shipped",
    "completed"
}

if status in valid_statuses:
    print("Đơn hàng hợp lệ")

Cách viết này dễ đọc và dễ mở rộng hơn rất nhiều so với việc sử dụng hàng loạt toán tử or.

3. Dùng enumerate() thay cho range(len())

Khi duyệt qua một danh sách và cần cả index lẫn giá trị, nhiều developer thường viết:

users = ["An", "Bình", "Chi"]

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

Code này không sai, nhưng Python cung cấp một cách viết tốt hơn với enumerate():

users = ["An", "Bình", "Chi"]

for i, user in enumerate(users):
    print(i, user)

Kết quả:

0 An
1 Bình
2 Chi

Nếu muốn index bắt đầu từ 1:

for i, user in enumerate(users, start=1):
    print(i, user)

Kết quả:

1 An
2 Bình
3 Chi

Tại sao nên sử dụng enumerate()?

Cách viết này:

for i, user in enumerate(users):

thể hiện trực tiếp ý định của developer:

Tôi muốn duyệt qua danh sách và lấy cả vị trí lẫn giá trị.

Trong khi đó:

for i in range(len(users)):

buộc chúng ta phải truy cập thêm:

users[i]

Vì vậy, enumerate() thường giúp code Python dễ đọc và “Pythonic” hơn.

Ví dụ thực tế

Hiển thị danh sách sản phẩm:

products = [
    "Laptop",
    "Keyboard",
    "Mouse",
    "Monitor"
]

for index, product in enumerate(products, start=1):
    print(f"{index}. {product}")

Kết quả:

1. Laptop
2. Keyboard
3. Mouse
4. Monitor

4. Dùng Counter để đếm dữ liệu

Giả sử bạn cần đếm số lần xuất hiện của từng phần tử trong một danh sách.

Cách thông thường:

words = [
    "python",
    "php",
    "python",
    "javascript",
    "php",
    "python"
]

counter = {}

for word in words:
    counter[word] = counter.get(word, 0) + 1

print(counter)

Kết quả:

{
    'python': 3,
    'php': 2,
    'javascript': 1
}

Python có sẵn Counter trong module collections, giúp công việc này đơn giản hơn:

from collections import Counter

words = [
    "python",
    "php",
    "python",
    "javascript",
    "php",
    "python"
]

counter = Counter(words)

print(counter)

Kết quả:

Counter({
    'python': 3,
    'php': 2,
    'javascript': 1
})

Tìm những phần tử xuất hiện nhiều nhất

Counter còn cho phép sử dụng most_common():

print(counter.most_common(2))

Kết quả:

[
    ('python', 3),
    ('php', 2)
]

Điều này rất hữu ích khi cần thống kê dữ liệu.

Ứng dụng thực tế

Counter có thể được sử dụng trong:

  • Phân tích log.
  • Thống kê từ khóa.
  • Phân tích dữ liệu.
  • Đếm lượt truy cập.
  • Phân tích dữ liệu scraping.
  • Thống kê reaction hoặc tương tác.
  • Xử lý dữ liệu text.

Ví dụ thống kê các HTTP status code:

from collections import Counter

status_codes = [
    200,
    200,
    404,
    200,
    500,
    404,
    200,
    301
]

counter = Counter(status_codes)

print(counter)

Kết quả:

Counter({
    200: 4,
    404: 2,
    500: 1,
    301: 1
})

5. Loại bỏ phần tử trùng lặp trong danh sách

Một trong những thao tác thường gặp khi xử lý dữ liệu là loại bỏ các phần tử bị trùng.

Ví dụ:

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

Nếu không quan tâm đến thứ tự, có thể sử dụng set:

unique_numbers = list(set(numbers))

print(unique_numbers)

Kết quả có thể là:

[1, 2, 3, 4, 5]

Tuy nhiên, khi xử lý dữ liệu thực tế, đôi khi chúng ta muốn vừa loại bỏ duplicate vừa giữ nguyên thứ tự xuất hiện ban đầu.

Có thể sử dụng:

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

unique_numbers = list(dict.fromkeys(numbers))

print(unique_numbers)

Kết quả:

[1, 2, 3, 4, 5]

Tại sao dict.fromkeys() hoạt động?

Dictionary trong Python hiện đại duy trì thứ tự insertion của các key.

Khi sử dụng:

dict.fromkeys(numbers)

các phần tử trùng nhau sẽ trở thành cùng một key và chỉ được giữ lại một lần.

Sau đó chúng ta chuyển dictionary trở lại thành list:

list(dict.fromkeys(numbers))

Ví dụ thực tế

Giả sử bạn lấy danh sách URL từ nhiều nguồn:

urls = [
    "https://example.com/page-1",
    "https://example.com/page-2",
    "https://example.com/page-1",
    "https://example.com/page-3",
    "https://example.com/page-2"
]

Có thể loại bỏ URL trùng:

unique_urls = list(dict.fromkeys(urls))

for url in unique_urls:
    print(url)

Kết quả:

https://example.com/page-1
https://example.com/page-2
https://example.com/page-3

Thủ thuật này đặc biệt hữu ích trong các chương trình scraping, crawling và xử lý dữ liệu.


Tổng kết

Chỉ với một vài tính năng nhỏ, Python có thể giúp chúng ta giảm đáng kể lượng code phải viết.

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

  1. Hoán đổi biến bằng a, b = b, a.
  2. Kiểm tra nhiều giá trị bằng in.
  3. Duyệt danh sách kèm index bằng enumerate().
  4. Đếm dữ liệu bằng Counter.
  5. Loại bỏ dữ liệu trùng lặp bằng set hoặc dict.fromkeys().

Điểm quan trọng không phải là cố gắng viết code ít dòng nhất có thể.

Một đoạn code tốt nên hướng tới ba yếu tố:

Dễ đọc – dễ hiểu – dễ bảo trì.

Đây cũng chính là một trong những điểm khiến Python trở thành lựa chọn phổ biến cho web development, automation, data processing, scraping và AI.

Trong các bài tiếp theo, chúng ta có thể tiếp tục khám phá những thủ thuật Python thực tế khác như zip(), any(), all(), list comprehension, unpacking, with, lambda, functoolsasyncio.

Categories:

Leave Comment

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