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

Tìm chênh lệch lớn nhất giữa các cặp tuple trong Python

Khi cần tìm chênh lệch lớn nhất (maximum difference) giữa các cặp phần tử trong list of tuples, có thể dùng list comprehension kết hợp hàm max() và abs().

List comprehension duyệt qua từng tuple, tính chênh lệch tuyệt đối giữa hai phần tử.

Hàm max() trả về giá trị lớn nhất từ iterable.

Ví dụ

# List of tuples (mỗi tuple 2 phần tử)
pairs = [(11, 14), (0, 78), (33, 67), (89, 0)]
print(f"List of tuples: {pairs}")

# Tính chênh lệch tuyệt đối cho mỗi cặp
# abs(b - a) cho tuple (a, b)
differences = [abs(b - a) for a, b in pairs]
print(f"Các chênh lệch: {differences}")

# Tìm chênh lệch lớn nhất
max_diff = max(differences)
print(f"\nChênh lệch lớn nhất: {max_diff}")

# Tìm cặp có chênh lệch lớn nhất
max_pair = max(pairs, key=lambda x: abs(x[1] - x[0]))
print(f"Cặp có chênh lệch lớn nhất: {max_pair} (chênh lệch: {abs(max_pair[1] - max_pair[0])})")

Kết quả

List of tuples: [(11, 14), (0, 78), (33, 67), (89, 0)]
Các chênh lệch: [3, 78, 34, 89]
Chênh lệch lớn nhất: 89
Cặp có chênh lệch lớn nhất: (89, 0) (chênh lệch: 89)

Giải thích

  • List comprehension [abs(b - a) for a, b in pairs] unpack từng tuple thành a, b và tính |b - a|.
  • max(differences) tìm giá trị lớn nhất trong list chênh lệch.
  • max(pairs, key=...) tìm trực tiếp tuple có chênh lệch lớn nhất.

Mở rộng: Tuple nhiều hơn 2 phần tử

# Tuple 3 phần tử: tìm max - min trong từng tuple
triplets = [(1, 5, 3), (10, 2, 8), (100, 50, 75)]
max_diffs = [max(t) - min(t) for t in triplets]
print(f"Chênh lệch max-min: {max_diffs}")  # [4, 8, 50]
print(f"Lớn nhất: {max(max_diffs)}")       # 50

# Tìm tuple có range lớn nhất
max_range_tuple = max(triplets, key=lambda t: max(t) - min(t))
print(f"Tuple range lớn nhất: {max_range_tuple}")

Chênh lệch theo cột (column-wise)

# Tìm chênh lệch lớn nhất cho từng cột
data = [(10, 20, 30), (15, 25, 5), (8, 30, 40)]
# Transpose: zip(*data) -> [(10,15,8), (20,25,30), (30,5,40)]
col_diffs = [max(col) - min(col) for col in zip(*data)]
print(f"Chênh lệch theo cột: {col_diffs}")  # [7, 10, 35]

Ứng dụng: Phát hiện outlier trong dữ liệu cặp

def find_outlier_pairs(pairs, threshold=None):
    """Tìm các cặp có chênh lệch lớn bất thường."""
    diffs = [(abs(b-a), (a,b)) for a,b in pairs]
    diffs.sort(reverse=True)
    if threshold:
        return [pair for diff, pair in diffs if diff > threshold]
    return [pair for diff, pair in diffs[:3]]  # Top 3

measurements = [(100, 102), (99, 101), (100, 100), (50, 200), (101, 99)]
print(find_outlier_pairs(measurements, threshold=50))  # [(50, 200)]