2017-12-02 3 views
-1

5 개 요소가 포함 된 각 목록과 함께 파이썬 목록 목록이 있습니다. 예를목록에서 파이썬 목록의 요소를 비교하고 일치하는 항목을 찾으십시오.

lists = [['x1', 'y1', 'z1', '10', ''], 
     ['x1', 'y1', 'z1', '', '5'], 
     ['x2', 'y2', 'z2', '10', ''], 
     ['x2', 'y2', 'z2', '10', ''], 
     ['x1', 'y1', 'z1', '', '5'], 
     ['x3', 'y3', 'z3', '', '40'], 
     ['x2', 'y2', 'z2', '', '20']] 

위해 나는 각 목록의 처음 3 개 요소를 비교하고 싶었 일치가있는 경우, 다음 일치하는 목록을 위해, 나는 모든 행의 4 열을 추가하고의 합과 비교하고 싶어 일치 목록의 5 번째 열 일치 목록 집합의 4 번째 열과 5 번째 열의 합이 일치하는 경우 행을 출력해야합니다.

그래서 위의 예에서 출력은
output = [['x1', 'y1', 'z1', '10', '10'], 
      ['x2', 'y2', 'z2', '20', '20']]   

누군가가 이것에 대한 솔루션을 제공 할 수 있어야한다.

감사합니다.

+0

불행히도 이것은 토론 포럼이나 튜토리얼 서비스가 아닙니다. 시간을내어 [ask]와 그 페이지의 다른 링크를 읽으십시오.예제를 연습하면서 [Tutorial] (https://docs.python.org/3/tutorial/index.html)을 통해 약간의 시간을 투자해야합니다. 파이썬에서 제공하는 도구에 대해 소개하고 문제 해결을위한 아이디어를 얻을 수도 있습니다. – wwii

+0

StackOverflow가이 방법으로 작동하지 않습니다. 우리는 해결책을 제공 할 수는 없습니다. 문제의 오류를 해결하는 데 도움을 줄 수 있습니다. – RottenCandy

답변

2

한 줄짜리 솔루션! 로 output을 제공

output = [l[:4] + [str(sum(int(j[4]) for j in lists if j[:3] == l[:3] and j[4]))] for l in (l for l in lists if l[3])] 

: 그것은 작동하는 방법을

[['x1', 'y1', 'z1', '10', '10'], ['x2', 'y2', 'z2', '20', '20']] 

대신 그 라인을 설명하려고, 나는의 적절한 설명은 더 큰 for-loop 아래로 스크롤로 과정을 확대 .

output = [] 
for l in (l for l in lists if l[3]): 
    sm = 0 
    for j in lists: 
     if j[:3] == l[:3] and j[4]: 
       sm += int(j[4]) 
    sm = str(sm) 
    if sm == l[3]: 
     output.append(l[:4] + [sm]) 

방법 ?

글쎄, 우리는 발전기 목록에서 반복하고 있습니다 : l for l in lists if l[3]. 본질적으로, 우리는 처음 세 요소가 같은 다른 목록을 합계하여이를 l[3]과 비교할 수 있도록 실제로 세 번째 인덱스에 값이있는 목록을 반복하려고합니다.

그런 다음 합계 변수 (sm)를 0으로 선언하고 다른 목록 요소를 추가합니다.

다음으로 처음 세 요소가 같은 lists의 다른 목록을 반복합니다.

첫 번째 세 요소가 같은지 확인하고 (j[:3] == l[:3]) 실제로 네 번째 요소의 합계에 추가 할 항목이 있는지 확인합니다. 그렇지 않으면 빈 문자열을로 변환하려고 시도 할 때 오류가 발생합니다. int). 그런 다음이 테스트를 통과하면 j[4]sm에 추가하고 다음 목록으로 계속 진행합니다.

다음은 합계 (sm)를 문자열로 변환합니다. 그 데이터 형식이 끝에 있어야하며 l[3]을 정수로 변환하여 저장합니다.

마지막으로이 문자열을 원래 목록의 네 번째 요소와 비교합니다. 동일한 경우, 원래 목록과 합계 (목록 연결을 사용하여)를 output 목록에 추가합니다.

+0

감사합니다. 그러나 한 가지 사례가 여기에 누락되었습니다. 나는 목록 []을 편집했다. 4 행 요소를 합하여 5 행 요소의 합계와 비교해야합니다. 위의 솔루션은 4 행 요소를 추가하지 않습니다. 솔루션에 추가 할 수 있습니까? 감사 –

관련 문제