2011-09-23 2 views
2

내 특정 문제에 관해서 SO에 관한 질문을 찾을 수없는 것 같습니다. 이렇게 전에 물어 본 적이 있다면 용서하십시오!Python 목록의 고유 목록을 정렬하십시오.

어쨌든 일련의 URL을 반복하고 고유 매개 변수가있는 고유 URL 목록을 제공하는 스크립트를 작성하고 있습니다.

문제는 실제로 여러 개의 중복을 제거하기 위해 매개 변수를 비교하고 있습니다. 그것은 설명하기 조금 어려운, 그래서 몇 가지 예 위하여 아마 :

내가이

  • hxxp 같은 URL의 목록을 말해봐 : //www.somesite.com/page.php ID = 3 = & 표제 DERP
  • hxxp : //www.somesite.com/page.php ID = 4 = & 표제 ㅋ
  • hxxp : //www.somesite.com/page.php ID = 3 &? c = 32 & title = 물건
  • hxxp : //www.somesite.com/page.php? b = 33,488,ID = 3

나는 그것이 목록의 목록에 각 URL을 구문 분석, 그래서 결국 나는이 같은 목록이 있습니다

sort = [['id', 'title'], ['id', 'c', 'title'], ['b', 'id']] 

내가 나에게 단 2을 줄 수있는 방법을 알아 내기 위해 태어나 셨를 그 시점에서 내 목록에서 목록 : 지금 나는 그것을 조금을 제압 조금있어 현재로

new = [['id', 'c', 'title'], ['b', 'id']] 

, 난 가까이 있어요 알고 나는이에 대한 내 머리를 놀라게했습니다 지금 커플 일 :(. 어떤 아이디어?

미리 감사드립니다. :)

편집 : 명확하지 않은 것을 유감스럽게 생각합니다! 이 스크립트는 스파이더 링 후 웹 응용 프로그램에 대한 고유 한 진입 점을 찾는 데 목적이 있습니다. URL은 3 독특한 진입 점

을 가지고 기본적으로 경우
['id', 'c', 'title'] 

I는 다음과 같은 2 고유의 진입 점과 동일한 링크에 그 원합니다 :

['id', 'title'] 

그래서 나는 목록의 나의 새로운 목록이 필요합니다 더 작은 변수가 더 큰 세트에있는 경우에만 2로 하나를 제거하고 3으로 하나를 선호하십시오. 아직도 불분명 한 점이 있으면 알려 주시고 빠른 답변을 부탁드립니다. :)

+0

어떤 규칙이 적용됩니까? '[ 'c', 'b'] '또는'[ 'b', 'id', 'c']'와'[ 'b', 'id', 'd']'가 있다면 어떨까요? –

+0

이해가 안됩니다. '[ 'id', 'title']'의 복제본은 무엇입니까? 그것은'[ 'id', 'c', 'title']'의 하위 집합이기 때문에입니까? –

+0

yi와 Marcelo 모두 맞습니다. 기준이 잘 정의되어 있지 않습니다. – agf

답변

5

나는 작은에 큰에서 모두 집합으로 각 쿼리를 변환 및 주문에 의해 ... 부분 집합은 "중복"(물론, 비 commutatively) 간주됩니다

시작을 가정합니다. 그런 다음 이미 추가 된 쿼리의 하위 집합이 아닌 경우 각 쿼리를 새 목록에 추가합니다. 모든 세트는 그 자체의 하위 집합이므로이 논리는 정확한 중복을 다룹니다.

a = [] 
for q in sorted((set(q) for q in sort), key=len, reverse=True): 
    if not any(q.issubset(Q) for Q in a): 
     a.append(q) 
a = [list(q) for q in a] # Back to lists, if you want 
+0

나는 우리가 승자를 가지고 있다고 생각합니까! 놀랍습니다 - 정말 고마워요. 더 큰 하위 집합으로 테스트 할 것이지만 이것은 놀랍게도 효과가있는 것 같습니다! :) :) – Fitblip

관련 문제