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

Kiểm tra tuple và list có giống hệt nhau trong Python

Khi cần kiểm tra xem một tuple và một list có chứa cùng các phần tử theo cùng thứ tự hay không, có thể dùng vòng lặp so sánh từng phần tử hoặc chuyển đổi kiểu.

Tuple và list khác kiểu dữ liệu, nên so sánh trực tiếp tuple == list luôn trả về False.

Ví dụ: So sánh từng phần tử

my_tuple = ('Hi', 'there', 'Will')
my_list = ['How', 'are', 'you']

print(f"Tuple: {my_tuple}")
print(f"List:  {my_list}")

# Cách 1: Vòng lặp so sánh từng phần tử
def are_identical(tup, lst):
    if len(tup) != len(lst):
        return False
    for i in range(len(tup)):
        if tup[i] != lst[i]:
            return False
    return True

result = are_identical(my_tuple, my_list)
print(f"\nTuple và list giống hệt nhau? {result}")

# Test với dữ liệu giống nhau
same_tuple = ('Hi', 'there', 'Will')
same_list = ['Hi', 'there', 'Will']
print(f"\nTuple: {same_tuple}")
print(f"List:  {same_list}")
print(f"Giống nhau? {are_identical(same_tuple, same_list)}")

Kết quả

Tuple: ('Hi', 'there', 'Will')
List:  ['How', 'are', 'you']

Tuple và list giống hệt nhau? False

Tuple: ('Hi', 'there', 'Will')
List:  ['Hi', 'there', 'Will']

Giống nhau? True

Giải thích

  • Hàm are_identical kiểm tra độ dài trước, sau đó so sánh từng cặp phần tử.
  • Nếu bất kỳ cặp nào khác nhau, trả về False ngay (short-circuit).
  • Chỉ trả về True khi tất cả phần tử khớp và độ dài bằng nhau.

Cách ngắn gọn: Chuyển đổi kiểu

# Chuyển tuple -> list rồi so sánh
result = list(my_tuple) == my_list

# Hoặc chuyển list -> tuple
result = my_tuple == tuple(my_list)

print(result)  # True/False

Cách này tận dụng so sánh built-in của Python (so sánh từng phần tử tự động).

Cách dùng zip() (Pythonic)

def are_identical_zip(tup, lst):
    return len(tup) == len(lst) and all(a == b for a, b in zip(tup, lst))

# zip() dừng tại iterable ngắn hơn, nên cần check len trước

So sánh trực tiếp tuple vs list (luôn False)

print(('a', 'b') == ['a', 'b'])  # False - khác kiểu!
print(tuple(['a', 'b']) == ('a', 'b'))  # True - cùng kiểu tuple

Ứng dụng: Validate input data

def validate_record(record, expected):
    """Kiểm tra record (tuple/list) khớp mẫu expected."""
    return tuple(record) == tuple(expected)

# Schema: (id: int, name: str, active: bool)
schema = (1, 'John', True)
input_data = [1, 'John', True]  # Từ JSON.parse() thường ra list
print(validate_record(input_data, schema))  # True