시스템 기능에 대한 일반적인 쿼리를 나타내는 시계열이 있습니다 (1 = working
및 0 = not working
). 예를 들어, (시스템이 다운 켜져있는 시간을파이썬에서리스트의 동일한 항목 길이를 계산합니다.
U = [0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0]
내가 수리 실패합니다 (시스템이 켜져있는 시간), 평균 시간 평균 시간 같은 것들을 계산에 관심이 목록으로 시계열을 표현) 및 다른 유사한 통계 그래서 내가하고 싶은 것은 순차적 인 1
항목과 순차적 인 0
항목을 세는 것입니다. 위의 예에서 시스템이 처음 시작될 때나 앞으로 다시 올 때가 언제인지를 알 수 없기 때문에 시작과 끝 세트를 잘라 내고 싶습니다. 그래서이 경우 생성하고자하는 거라고 출력 내가이 작업을 수행하는 스크립트를 작성했습니다
uptime = [6, 4, 9, 2] # 6 ones followed by zeros, then 4 ones followed by zeros, etc.
downtime = [3, 3, 2] # like uptime but ignoring zeros at indices [0,1] and [-1]
것하지만 조금 어색한 것 같다 내가 더 나은, 더 파이썬이 있는지 궁금하네요 그것을하는 방법. 여기에 내가 가진 것이있다. 이 작품
print count_times(U)
# [6, 4, 9, 2]
print count_times(U, down = True)
# [3, 3, 2]
,하지만 난 도움이되지만이 할 수있는 청소기 방법이 있는지 궁금 할 수 없습니다
def count_times(U, down=False):
if down:
U = [1 - u for u in U]
T = []
# Skip the first entry as you don't know when it started
m = U.index(0)
m += U[m:].index(1)
while m < len(U):
try:
T.append(U[m:].index(0))
m += U[m:].index(0)
m += U[m:].index(1)
except ValueError:
# skip the last entry as you don't know when it will end
return T
항복?
무엇 OP는 물었다. 그는 다음과 같이 말했다. "위의 예에서 시스템이 처음 시작된 시점과 미래에 다시 나타날 시점을 알 수 없으므로 시작과 끝 세트를 정리해야합니다. 이 경우 생성해야 할 출력은' –