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

Python - Gán giá trị cụ thể cho phần tử không phải Max/Min trong Tuple

Khi cần thay thế tất cả phần tử trong tuple KHÔNG phải là giá trị lớn nhất (max) hoặc nhỏ nhất (min) bằng một giá trị cụ thể K, có thể dùng vòng lặp kết hợp max() và min().

Ví dụ

my_tuple = (25, 56, 78, 91, 23, 11, 0, 99, 32, 10)
print(f"Tuple gốc: {my_tuple}")

K = 5
print(f"Giá trị thay thế K = {K}")

# Tìm max và min
max_val = max(my_tuple)
min_val = min(my_tuple)
print(f"Max = {max_val}, Min = {min_val}")

# Xử lý
result_list = []
for elem in my_tuple:
    if elem not in (max_val, min_val):
        result_list.append(K)
    else:
        result_list.append(elem)

result_tuple = tuple(result_list)
print(f"\nTuple kết quả: {result_tuple}")

Kết quả

Tuple gốc: (25, 56, 78, 91, 23, 11, 0, 99, 32, 10)
Giá trị thay thế K = 5
Max = 99, Min = 0
Tuple kết quả: (5, 5, 5, 5, 5, 5, 0, 99, 5, 5)

Giải thích

  • Tìm max_val = 99 và min_val = 0 của tuple.
  • Duyệt từng phần tử: nếu KHÔNG phải max và KHÔNG phải min -> thay bằng K.
  • Phần tử là max hoặc min -> giữ nguyên.
  • Chuyển list kết quả thành tuple.

Cách ngắn gọn: List comprehension

max_val, min_val = max(my_tuple), min(my_tuple)
result = tuple(K if x not in (max_val, min_val) else x for x in my_tuple)
print(result)  # (5, 5, 5, 5, 5, 5, 0, 99, 5, 5)

Xử lý trường hợp max == min (tất cả phần tử giống nhau)

def replace_non_extremes(tup, fill_value):
    if not tup:
        return tup
    max_val, min_val = max(tup), min(tup)
    if max_val == min_val:
        return tup  # Tất cả giống nhau, không thay đổi
    return tuple(fill_value if x not in (max_val, min_val) else x for x in tup)

print(replace_non_extremes((5, 5, 5), 0))      # (5, 5, 5)
print(replace_non_extremes((1, 2, 3, 4), 0))   # (1, 0, 0, 4)

Thay thế bằng giá trị tính toán (ví dụ: trung bình)

def replace_with_mean(tup):
    """Thay phần tử không phải max/min bằng trung bình."""
    if len(tup) < 3:
        return tup
    max_v, min_v = max(tup), min(tup)
    mid_vals = [x for x in tup if x not in (max_v, min_v)]
    if not mid_vals:
        return tup
    mean_val = sum(mid_vals) / len(mid_vals)
    return tuple(mean_val if x not in (max_v, min_v) else x for x in tup)

print(replace_with_mean((10, 20, 30, 40, 50)))  # (10, 30.0, 30.0, 30.0, 50)

Áp dụng cho list (in-place)

def replace_in_list(lst, fill_value):
    """Sửa đổi list trực tiếp."""
    if not lst:
        return
    max_v, min_v = max(lst), min(lst)
    if max_v == min_v:
        return
    for i in range(len(lst)):
        if lst[i] not in (max_v, min_v):
            lst[i] = fill_value

data = [25, 56, 78, 91, 23, 11, 0, 99, 32, 10]
replace_in_list(data, 5)
print(data)  # [5, 5, 5, 5, 5, 5, 0, 99, 5, 5]