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

Python – Nhóm phần tử liên tiếp theo dấu


Khi cần nhóm các phần tử liên tiếp có cùng dấu (dương/âm) trong danh sách, ta dùng toán tử XOR (^) trên dấu của số (kiểm tra thay đổi dấu) kết hợp enumerate().

Ví dụ

my_list = [15, -33, 12, 64, 36, -12, -31, -17, -49, 12, 43, 30, -23, -35, 53]
print("Danh sách ban đầu:")
print(my_list)
my_result = [[]]
for (index, element) in enumerate(my_list):
    if index == 0:
        my_result[-1].append(element)
    elif element ^ my_list[index - 1] < 0:
        my_result.append([element])
    else:
        my_result[-1].append(element)
print("Kết quả:")
print(my_result)

Kết quả

Danh sách ban đầu: [15, -33, 12, 64, 36, -12, -31, -17, -49, 12, 43, 30, -23, -35, 53]
Kết quả: [[15], [-33], [12, 64, 36], [-12, -31, -17, -49], [12, 43, 30], [-23, -35], [53]]

Giải thích

  • Định nghĩa danh sách số nguyên dương/âm xen kẽ.

  • Khởi tạo danh sách kết quả chứa một list rỗng.

  • Duyệt với enumerate. Với phần tử đầu, thêm vào nhóm đầu.

  • Với phần tử sau, dùng element ^ prev < 0 để kiểm tra đổi dấu (XOR của hai số khác dấu cho kết quả âm).

  • Nếu đổi dấu, tạo nhóm mới; ngược lại thêm vào nhóm hiện tại.

  • In các nhóm liên tiếp cùng dấu.