2017-12-26 1 views
1

파이썬에서 이와 같은 목록에서 특정 임계 값 (예 : 4) 미만의 블록 크기를 연속적으로 제거하려면 어떻게합니까?임계 값보다 작은 블록 크기를 바꿉니다 - Python

L = [000001111100010110000

: 001100000110000]

나는 결과는 다음과 같이되고 싶어

O = [0000011111111111100000 , 0000000000000]

새 목록은 블록 크기가 연속적으로 eshold (여기 4)를 이웃 값으로 채운다.

나는 부드럽게하는 필터의 왕을 생각하고 있었지만 찾을 수 없었다. 또한, 나는이 원시 코드를 쓰려고했지만 논리를 생각할 수는 없었다.

이진 목록이라고 가정합니다.

+2

힌트 :'itertools.groupby'. –

+0

임계 값 4의 [00011001110]에 대한 출력은 어떻게됩니까? – MrT

+0

@Piinthesky 초기 블록 크기 자체가 크기 임계 값이 아닌 경우 조금 복잡하다고 생각했습니다. 나는 itertools.groupby로 나의 문제를 해결했다. –

답변

1

@ cᴏʟᴅs As에 명시된 바와 같이 itertools.groupby을 사용하면 원하는 것을 얻을 수 있습니다.

from itertools import groupby 

L = [0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0] 
ans = [] 

for (i,j) in groupby(L): 
    a = list(j) 
    if len(a)<4: # replace with threshold 
     ans = ans + [1-i]*len(a) # not of a binary value i = 1-i 
    else: 
     ans = ans + a 
print(ans) 

출력 :

[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
+0

가능한 경우 코드를 개선하기 위해 의견을 보내 주시면 감사하겠습니다. – Miraj50

+0

예 .. 나는 COLDSPEED가 제안한 itertools.groupby로 문제를 해결했습니다. –

+0

답변 해 주셔서 감사합니다. –

관련 문제