2017-03-27 1 views
-1

저는 목록에 inorder에 튜플 (x, y)이 포함 된 목록 집합 'u'가 있습니다. 더 큰 문제의 일부로 목록이 생겼고 목록의 'u'와 같은 튜플 목록의 다른 요소와 튜플 목록의 각 튜플 요소를 비교하려고합니다. 예를 들어, u [0]리스트에 속하는 (3,10) 요소는리스트 u [1], u [2], u [3] ...에서 동일한 x 좌표를 갖는 요소와 비교 될 것이다. X 좌표가 동일 할 경우, 가장 높은 y 좌표를 포함하는 요소는 목록에서 존속하지만, 가장 작은 y 좌표를 갖는 요소는 제거되어야합니다.x와 y 좌표를 비교하고 튜플 목록에서 요소를 제거합니다

u = [[(2, 10), (3, 10), (4, 10), (5, 10), (6, 10), (7, 10), (8, 10), (9, 10)], 
[(3, 15), (4, 15), (5, 15), (6, 15), (7, 15)], 
[(5, 12), (6, 12), (7, 12), (8, 12), (9, 12), (10, 12), (11, 12), (12, 12)], 
[(15, 10), (16, 10), (17, 10), (18, 10), (19, 10), (20, 10)], 
[(19, 8), (20, 8), (21, 8), (22, 8), (23, 8), (24, 8)]] 

(3,10) of u[0] compared against (3,15) of u[1] => (3,15) survives and (3,10) gets eliminated from the list. 

그래서, 나는 누군가가 이것에 대한 간단하고 파이썬 솔루션를 도와 줄 수 있기를 바랍니다.

def filterAllmax(self, u): 
     u = [item for sub in u for item in sub] 
     for i in range(len(u)): 
      for j in range(i, len(u)): 
       for k in u[i]: 
        if k[0][0] in u[j]: 
         m += [u[i] for i, v in enumerate(u[j]) if v[1] < k[0][1] # store the values that have y co-ordinates less than the value 
     for i in m: 
      u.remove(i) 
     return u 

참고 : 이전에 내 쿼리를 게시에, 나는 관련 솔루션에 대한 유래를 검색했지만, 그 맞는 일을 찾을 수 없습니다 여기

사전

감사 내가 한 일이다 내 필요.

+1

우리는 당신을 위해 몇 가지 코드를 작성하고자합니다. 대부분의 사용자는 곤경에 처한 코더 코드를 기꺼이 만들지 만 일반적으로 포스터가 이미 문제를 해결하려고 시도했을 때만 도움이됩니다. 이러한 노력을 입증하는 좋은 방법은 지금까지 작성한 코드 ([mcve] 형성), 예제 입력 (있는 경우), 예상 출력 및 실제로 얻은 출력 (출력, 역 추적 등)을 포함시키는 것입니다. 기타.). 더 자세하게 제공할수록 더 많은 답변을받을 수 있습니다. [둘러보기] 및 [질문]을 확인하십시오. – TigerhawkT3

+0

이것은 코드 스 니펫 사이트가 아니므로이 특정 작업에 대한 기존 스 니펫을 찾지 못했지만 놀랄 일이 아닙니다. – TigerhawkT3

+0

글쎄,이 코드 스 니펫 사이트가 아닙니다. 그리고 나는리스트리스트에서 튜플을 비교하는 접근법을 찾고있다. 나는 정확한 해결책을 필요로하지 않는다. 나는 이것을위한 접근법이 필요하다. 나는 지금까지 시도한 것을 게시 할 것이다. – vamsi465

답변

0

나는 Pythonic 방식으로 글을 써 보았습니다.

print {i1[0]: max(0,*(i[1] for i in sum(u, []) if i[0] == i1[0])) for i1 in sum(u, [])} 

결과 :

[(2, 10), (3, 10), (4, 10), (5, 10), (6, 10), (7, 10), (8, 10), (9, 10), (3, 15), (4, 15), (5, 15), (6, 15), (7, 15), (5, 12), (6, 12), (7, 12), (8, 12), (9, 12), (10, 12), (11, 12), (12, 12), (15, 10), (16, 10), (17, 10), (18, 10), (19, 10), (20, 10), (19, 8), (20, 8), (21, 8), (22, 8), (23, 8), (24, 8)] 

그런 다음 최대 값을 얻기 위해 max()를 사용하여 목록을 반복하고 DICT 이해를 사용

{2: 10, 3: 15, 4: 15, 5: 15, 6: 15, 7: 15, 8: 12, 9: 12, 10: 12, 11: 12, 12: 12, 15: 10, 16: 10, 17: 10, 18: 10, 19: 10, 20: 10, 21: 8, 22: 8, 23: 8, 24: 8} 

sum(u, [])이 단순 목록으로 중첩 된 목록을 변환 결과를 반환합니다.

관련 문제