2013-06-15 3 views
2

알 수없는 하위 목록이있는 목록이 있습니다. 항상 하나의 하위 목록을 ALL 다른 하위 목록과 비교하고 싶습니다. 위치 0, 3 및 5의 첫 번째 하위 목록의 값이 다른 하위 목록과 동일하면 모든 일치 목록의 위치 7에 값을 함께 추가하려고합니다. 그런 다음 7 번째 위치에 새로 추가 된 값이있는 첫 번째 하위 목록을 새 목록에 추가하십시오. 이 코드python 목록의 하위 목록 값을 비교하고 값을 더합니다.

def Inter(list): 
a = 0 
b = 3 
c = 5 
d = 0 
x = [] 

for i in range(len(list)): 
    for y in range(len(list)): 
     if list[i][a] == list[y][a] and list[i][b] == list[y][b] and list[i][c] == list[y][c]: 
      IntSumtemp = [] 
      IntSumtemp.append(str(float(list[i][7]) + float(list[y][7]))) 
      x.append(list[i] + IntSumtemp) 
      del (x[d][7]) 
      d +=1 
     else: None 
return x 
new_list= Inter(list) 

을 썼다

new_list = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '6'], 
      ['D', 'r', 's', 'E', 't', 'u', 'F', 4],...] 

하지만이 출력했다 :

list = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '1'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '2'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '2'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '2'],.....] 

는 출력을 원

new_list= [['A', 'a', 'b', 'B', 'c', 'd', 'C', '2.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '6.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '5.0'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '5.0'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0']] 

사람이 나를 도울 수

주세요? 은이었다 당신에 반대 (N) (죄송합니다, 나는 절대 초보자입니다, 그래서 아무것도 불분명 한 경우, PLZ ... 문의)

답변

1

이러한 접근 방식은 O입니다 O (N^2)

from collections import OrderedDict 
from operator import itemgetter 

items = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '1'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '2'], 
     ['A', 'a', 'b', 'B', 'c', 'd', 'C', '2'], 
     ['D', 'r', 's', 'E', 't', 'u', 'F', '2']] 


key = itemgetter(0, 3, 5) 
d = OrderedDict() 

for x in items: 
    d.setdefault(key(x), x[:7] + [0])[7] += int(x[7]) 

print d.values() 

[['A', 'a', 'b', 'B', 'c', 'd', 'C', 6], ['D', 'r', 's', 'E', 't', 'u', 'F', 4]] 
+0

+1 읽을 수있는 두 줄의 경우. 모든 것이 어떻게 작동하는지에 대한 작은 설명은 OP가 초보자 인만큼 좋을 것입니다. 덕분에 – Blender

+0

! 어떻게 작동하는지 설명해 주시겠습니까? 나는 매우 비슷한 문제에 대해 그것을 사용하고 싶다. 나는 2 개의 분리 된리스트 (sublist로)를 가지고 오직 1 개의리스트 대신 sublists를 비교한다. – Koala

관련 문제