값 목록이 주어지면 연속 목록으로 존재하는 부울 값이 어느 위치에 있는지 알고 싶습니다. 즉, 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]