다음은 겉보기에 간단한 문제입니다. 정수 시퀀스를 오름차순으로 생성하는 반복기 목록이 주어지면 모든 시퀀스에 나타나는 정수 만 생성하는 간결 생성기를 작성하십시오.순서가 지정된 항복 형 파이썬 반복자 세트에 합치기
어젯밤에 몇 편의 논문을 읽은 후 파이썬에서 완전 최소 전체 텍스트 인덱서 인 as seen here을 해킹하기로 결정했습니다 (현재 버전은 상당히 오래된 버전 임에도 불구하고).
내 문제는 search()
함수와 관련이 있습니다.이 함수는 각 게시 목록을 반복하고 모든 목록에 나타나는 문서 ID 만 산출해야합니다. 위의 링크에서 알 수 있듯이 현재 재귀 적으로 작동하지 않는 시도는 끔찍합니다.
예 :
postings = [[1, 100, 142, 322, 12312],
[2, 100, 101, 322, 1221],
[100, 142, 322, 956, 1222]]
항복해야 :이이 적어도 하나 개의 우아한 재귀 함수의 솔루션입니다,하지만 난 가능하면 피하기 싶습니다
[100, 322]
. 그러나 중첩 된 생성기 표현, itertools
악용 또는 다른 종류의 코드 골프와 관련된 솔루션은 환영 할만한 것 이상입니다. :-)
함수가 최소한의 목록에있는 항목만큼 많은 단계를 필요로하고 전체 정수 세트를 메모리에 빠뜨리지 않고 정렬 할 수 있어야합니다. 앞으로 이러한 목록은 디스크에서 읽을 수 있으며 사용 가능한 RAM보다 클 수 있습니다.
지난 30 분 동안 나는 내 혀끝에 대해 생각해 봤지만 코드로 이해할 수는 없습니다. 기억하십시오, 이것은 단지 재미를위한 것입니다!
굉장!표준 라이브러리에 있어야한다는 것을 알고있었습니다. 슬프게도 파이썬 2.6에서만 가능하지만 괜찮습니다. – dmw
와우, 멋진 솔루션! –
좋은 해결책입니다. 단 하나의 반복자 내에서 정수가 반복되지 않는다고 가정하고 있지만, OP는 가정이 아닙니다. posting = [[100,100], [1,1]]은 목록 전체에 값이 반복되지 않더라도 [100,1]을 반환합니다. – Triptych