2017-10-21 3 views
0

참고 : 질문을 편집했습니다.특정 값까지 튜플 목록의 파이썬 합계 값

특히 파이썬에서 반복에 문제가 있습니다. 특히 특정 숫자까지 값을 합산하고자 할 때.

I는 다음과 같습니다 튜플의 목록을 가지고 : 여기에 내가 직면하고있어 문제에 대한 자세한 내용입니다 "최대"각 값은

[(1, 0.5, 'min'), 
(2, 3, 'NA'), 
(3, 6, 'NA'), 
(4, 40, 'NA'), 
(5, 90, 'NA'), 
(6, 130.8, 'max'), 
(7, 129, 'NA'), 
(8, 111, 'NA'), 
(9, 8, 'NA'), 
(10, 9, 'NA'), 
(11, 0.01, 'min'), 
(12, 9, 'NA'), 
(13, 40, 'NA'), 
(14, 90, 'NA'), 
(15, 130.1, 'max'), 
(16, 112, 'NA'), 
(17, 108, 'NA'), 
(18, 90, 'NA'), 
(19, 77, 'NA'), 
(20, 68, 'NA'), 
(21, 0.9, 'min'), 
(22, 8, 'NA'), 
(23, 40, 'NA'), 
(24, 90, 'NA'), 
(25, 92, 'NA'), 
(26, 130.4, 'max')] 

내가 이르는 각 값을 합계를 구할를 선도하는 "min"을 선택하고이 결과를 별도의 두 목록에 추가하십시오.

예를 들어, 출력은 다음과 같아야합니다

min_sums = [1+2+3+4+5,11+12+13+14, 21+22+23+24+15] 
max_sums = [6+7+8+9+10, 15+16+17+18+19+20, 26] 

나는 또한뿐만 아니라 출력으로 실제로 합산하고있는 값을 추적하고이하고 싶은 :

min_sums_lst = [[1,2,3,4,5], [11,12,13,14],[21,22,23,24,15]] 
max_sums_lst = [[6,7,8,9,10], [15,16,17,18,19,20], [26]] 

나는 인덱스 값을 사용할 수 있다고 생각하지만, Python을 처음 접했을 때 어떻게 진행해야하는지 정확히 알지 못합니다. 나는 생물학을 공부하고 있지만 CS를 배우는 것이 내 일에 도움이 될 수 있다고 생각합니다.

max_list = [] 
min_list = [] 
flag = '' 
min_index = 0 
max_index = float('inf'); 

if flag == 'h': 
    max_list.append(item) 
elif flag == 'c': 
    min_list.append(item) 

for i, item in enumerate(minmax_list): 
    print(i, item) 
    print("max_index: ", max_index) 
    print("min_index: ", min_index) 
    if item[2] == 'min': 
         min_index = i 
         max_list('h', item[0]) 
    elif item[2] == 'NA' and (i < max_index): 
        max_list('h', item[0]) 
    elif item[2] == 'max': 
         max_index = i 
         max_list('c', item[0]) 
    elif item[2] == 'NA' and (i > min_index): 
        min_list('c', item[0]) 

저는 파이썬에 아주 익숙합니다. 어떤 도움을 주시면 감사하겠습니다. 위의 출력에 표시된대로 min 및 max를 기준으로 각 튜플의 첫 번째 항목을 추가하려고합니다.

+0

나는 아직도 내가 실제로 합산하고 값을 추적하는 방법에 문제가있어, 그래서 사람이 min_sums_lst 및 max_sums_lst을 구하는 방법에 대한에 추가 할 수 있다면, 그것은 많은 도움이 될 것이다! – djennacs

답변

1

제 대답은 @ Stefan 's에 대해 약간 다른 접근 방식을 취합니다. 그것은 좀 더 검증을하고, 여러분은 'min'과 'max'외에 다른 종류를 쉽게 추가 할 수 있습니다.

def partition_items(items): 
    lists = { 
     'min': [], 
     'max': [], 
    } 
    current_kind = None 
    current_list = None 
    for value, _, kind in items: 
     if kind != current_kind and kind != 'NA': 
      current_kind = kind 
      # You'll get a error here if current_kind isn't one of 'min' 
      # or 'max'. 
      current_list = lists[current_kind] 
      current_list.append(0) 
     # You'll get an error here if the first item in the list doesn't 
     # have type of 'min' or 'max'. 
     current_list[-1] += value 
    return lists 


lists = partition_items(items) 
print(lists['min']) 
# -> [15, 50, 115] 
print(lists['max']) 
# -> [40, 105, 26] 
1

죄송합니다. 귀하의 시도를 읽는 데 방해가되지 않으므로 매우 복잡해 보입니다.

min_sums = [] 
max_sums = [] 
for x, _, what in minmax_list: 
    if what != 'NA': 
     current = min_sums if what == 'min' else max_sums 
     current.append(0) 
    current[-1] += x 
+0

해답을 보내 주셔서 감사합니다. 올바른 것으로 보이지만 그것을 확장하고 전략을보다 잘 이해하려고합니다. – djennacs