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

Python - Phạm vi Boolean liên tục

Cho danh sách giá trị, chúng ta muốn biết vị trí nào có giá trị Boolean liên tục. Nghĩa là sau khi gặp TRUE, các giá trị TRUE tiếp theo liên tục cho đến khi gặp FALSE. Tương tự cho FALSE.

Với itertools

Dùng accumulate và groupby từ itertools. Áp dụng accumulate để theo dõi giá trị được gom nhóm bằng sum. Giá trị cuối cùng là vị trí kết thúc.

Ví dụ

from itertools import accumulate, groupby
listA = [False, True, True, False, False]
print("Danh sách cho trước:\n", listA)
res = [0] + list(accumulate(sum(1 for x in y) for x, y in groupby(listA)))
print("Vị trí phạm vi giá trị liên tục:\n", res)

Kết quả

Danh sách cho trước: [False, True, True, False, False]
Vị trí phạm vi giá trị liên tục: [0, 1, 3, 5]

Sử dụng enumerate

Dùng enumerate kết hợp zip để liệt kê vị trí bằng cách so sánh mỗi phần tử với phần tử tiếp theo. Nếu không bằng nhau, vị trí mới là điểm bắt đầu phạm vi liên tục.

Ví dụ

listA = [False, True, True, False, False]
print("Danh sách cho trước:\n", listA)
res = [e for e, (x, y) in enumerate(zip([2] + listA, listA + [2])) if x != y]
print("Vị trí phạm vi giá trị liên tục:\n", res)

Kết quả

Danh sách cho trước: [False, True, True, False, False]
Vị trí phạm vi giá trị liên tục: [0, 1, 3, 5]