2015-01-20 6 views
0

프로그램의 아이디어는 일부 구조의 수명 시간을 계산하는 것입니다 (하나씩 같은 구조로 계산).하지만 구현에 문제가 있습니다. 카운터 또는 열거 기능, 나는 모두의 개수를 계산하고 싶지 않아요. 나는 이것을 여러 가지 방법으로 시도했다. 이제 나는 붙어있다.루프에있는 카운터 /리스트/카운트 카운터가 하나씩 차례로 반복되는 경우 (파이썬)

struct=[1, 2, 2, 2, 3, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1,] #input list of structures 
list1=[] #list of lifetimes for struct 1 

for i in range (0, len(struct)-1): 
    a=struct[i-1] 
    b=struct[i] 
    c=struct[i+1] 
    if a!=1 and b==1 and c!=1: # if it is one separated record 
     list1.append(1) 
    if a!=1 and b==1 and c==1: # for first record in sequence 
     list1.append('f') 
    if a==1 and b==1 and c==1: # for middle record in sequence 
     list1.append('m') 
    if a==1 and b==1 and c!=1: # for last record in sequence 
     list1.append('l') 

print (list1) 

그것은 나를 제공 : [1, 1, 'F', 'm', 'm', 'L', 'F', 'L'을]
당신은 어떤 방법을 조언을 나에게 줄 수 카운터를 구현합니까? 구조 목록에서 [1, 1, 1, 1]부터 [ 'f', 'm', 'm', 'l] (전나무/중간/중간/마지막)이 주어 지므로 4 개의 레코드가됩니다. [1, 1, 4, 2]를 얻으려면

죄송합니다, 프로그래밍 언어가 아닌데, 나는이 분야에서 초보자입니다. 비슷한 질문을 모두 검색했지만 찾을 수 없습니다.

+0

'for i 다음의 모든 줄 범위 (0, len (struct) -1) :''print (list1)'가 들여 쓰기되기 전에? –

+1

출력에 숫자 만 원할 경우 목록에 문자를 추가하는 이유는 무엇입니까? – dg99

+0

'f', 'm', 'l'은 왜 추가하나요? 어떻게 1, 'f', 'm', 'l'을 목록에 추가하면 그 안에 2와 4가있는 목록을 제공할까요? 그리고 어쨌든이 목록과 관련하여 [1, 1, 4, 2]의 의미는 무엇입니까? –

답변

2

이게 뭔가요?

inlist = [1, 2, 2, 2, 3, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1,] 
#   1     1  1--2--3--4  1--2 
def lifetime(num): 
    output = [] 
    count = 0 
    for x in inlist: 
     if x == num: 
      count += 1 
     else: 
      if count != 0: 
       output.append(count) 
       count = 0 
    if count != 0: 
     output.append(count) 

    print output 

lifetime(1) 
lifetime(2) 
lifetime(3) 

출력 :

[1, 1, 4, 2] 
[3, 1, 1] 
[2, 1] 
+0

@augurar는 목록에있는 연속 1의 각 그룹에 대해 그룹 길이 목록이 필요하다고 말했습니다. –

+0

예! 고맙습니다! 그런 사소한 경우에 불편을 끼쳐 드려 죄송합니다! –

0

당신은 목록은 다음 값 그룹에 itertools.groupby()을 사용하여 주어진 값으로 각 그룹의 수를 반환 할 수 있습니다

from itertools import groupby 

def ilen(iterable): 
    """ Return the length of an iterable """ 
    return sum(1 for _ in iterable) 

def lifetime(num, lst): 
    """ Return a list of counts for each group of num in lst """ 
    return [ilen(g) for k, g in groupby(lst) if k==1] 

예 :

>>> inlist = [1, 2, 2, 2, 3, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1,] 
>>> lifetime(1, inlist) 
[1, 1, 4, 2] 
관련 문제