Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python - 연속 부울 범위

<시간/>

값 목록이 주어지면 연속 목록으로 존재하는 부울 값이 어느 위치에 있는지 알고 싶습니다. 즉, TRUE인 값을 만난 후 FALSE 값을 찾을 때까지 해당 위치에서 true 값이 계속 유지됩니다. 마찬가지로 FALSE가 발견되면 TRUE가 발견될 때까지 FALSE의 연속 값이 있습니다.

itertools 사용

W는 itertools 모듈에서 groupby와 함께 누적을 사용할 수 있습니다. 이 예에서는 주어진 목록을 취한 다음 sum 함수를 사용하여 함께 가져온 값을 추적하기 위해 누적 함수를 적용합니다. 목록의 마지막 값은 주어진 목록이 끝나는 마지막 위치입니다.

예시

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)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

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

열거 사용

zip 함수와 함께 열거 함수는 각 요소를 다음 요소와 비교하여 위치를 나열하는 데 사용됩니다. 같지 않으면 새 위치 값이 연속 범위의 시작점으로 간주됩니다.

예시

# 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)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

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