Computer >> Máy Tính >  >> Lập trình >> Python

Python - Dãy Boolean Liền kề

Đưa ra một danh sách các giá trị, chúng tôi muốn biết các giá trị Boolean được hiển thị ở vị trí nào dưới dạng danh sách liền kề. Có nghĩa là sau khi chúng ta gặp một giá trị TRUE, sẽ có một giá trị true liên tục từ vị trí đó cho đến khi giá trị FALSE được tìm thấy. Tương tự khi tìm thấy FALSE, sẽ có một giá trị liền kề của FALSE cho đến khi tìm thấy TRUE.

Với itertools

W có thể sử dụng tích lũy cùng với groupby từ mô-đun itertools. Trong ví dụ này, chúng tôi lấy một danh sách nhất định và sau đó áp dụng hàm tích lũy để theo dõi các giá trị được kết hợp với nhau bằng cách sử dụng hàm sum. Giá trị cuối cùng trong danh sách là vị trí cuối cùng mà danh sách đã cho kết thúc.

Ví dụ

from itertools import accumulate, groupby

# Given list
listA = [False, True,True,False,False]

print("Given list : \n",listA)

# Applying accumulate
res = [0] + list(accumulate(sum(1 for x in y)
for x, y in groupby(listA)))

# Result
print("Positions for Range of contigous values:\n ",res)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

Given list :
[False, True, True, False, False]
Positions for Range of contigous values:
[0, 1, 3, 5]

Sử dụng liệt kê

Hàm liệt kê cùng với hàm zip được sử dụng để liệt kê vị trí bằng cách so sánh từng phần tử với phần tử tiếp theo. Nếu chúng không bằng nhau thì giá trị vị trí mới được coi là điểm nhìn chằm chằm của dải tiếp giáp.

Ví dụ

# Given list
listA = [False, True,True,False,False]

print("Given list : \n",listA)

# Applying enumerate
res = [e for e, (x, y) in
enumerate(zip([2]+ listA, listA + [2])) if x != y]

# Result
print("Positions for Range of contigous values:\n ",res)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

Given list :
[False, True, True, False, False]
Positions for Range of contigous values:
[0, 1, 3, 5]