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.