Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Sắp xếp các list bên trong tuple trong Python

Khi cần sắp xếp các list bên trong một tuple, có thể sử dụng phương thức tuple(), sorted() và biểu thức generator (generator expression).

Hàm sorted() sắp xếp các phần tử của iterable và trả về list mới đã sắp xếp.

Generator là cách đơn giản tạo iterator, tự động triển khai __iter__() và __next__().

Phương thức tuple() nhận một iterable và chuyển đổi thành kiểu tuple.

Ví dụ

# Tuple chứa các list
my_tuple = ([4, 55, 100], [44, 55, 67], [7, 86, 0])
print("Tuple ban đầu:")
print(my_tuple)

# Sắp xếp từng list con bằng sorted() và generator expression
# sorted(sub) trả về list đã sắp xếp cho mỗi sub-list
my_result = tuple(sorted(sub) for sub in my_tuple)

print("\nTuple sau khi sắp xếp từng list con:")
print(my_result)

Kết quả

Tuple ban đầu:
([4, 55, 100], [44, 55, 67], [7, 86, 0])

Tuple sau khi sắp xếp từng list con:
([4, 55, 100], [44, 55, 67], [0, 7, 86])

Giải thích

  • Tuple gốc chứa 3 list: [4, 55, 100], [44, 55, 67], [7, 86, 0].
  • Biểu thức generator (sorted(sub) for sub in my_tuple) duyệt qua từng list con và áp dụng sorted().
  • sorted() trả về list mới đã sắp xếp tăng dần.
  • tuple(...) chuyển kết quả generator thành tuple mới.
  • Tuple mới chứa các list đã được sắp xếp riêng lẻ.

Lưu ý quan trọng

Tuple là bất biến (immutable), nhưng các phần tử bên trong (như list) có thể thay đổi nếu chúng là mutable. Tuy nhiên, code trên tạo tuple mới chứa các list mới (do sorted() trả về list mới), không sửa đổi tuple gốc.

Các biến thể

# Sắp xếp giảm dần
my_result_desc = tuple(sorted(sub, reverse=True) for sub in my_tuple)

# Sắp xếp theo key tùy chỉnh (ví dụ: giá trị tuyệt đối)
my_result_abs = tuple(sorted(sub, key=abs) for sub in my_tuple)

# Nếu muốn sửa đổi list gốc trong tuple (không khuyến khích do side effect)
for sub in my_tuple:
    sub.sort()  # Sắp xếp in-place