내가 그 TLDs정렬 및 그룹이 한 번
내 코드에 의해 그룹에 URL을 목록을 원하는는 다음과 같습니다 (where n == len(urls)
), 정렬 할 때 처음 n 번, 그룹화 할 때 두 번째 n 번. N 번 만들 수 있습니까?
내가 그 TLDs정렬 및 그룹이 한 번
내 코드에 의해 그룹에 URL을 목록을 원하는는 다음과 같습니다 (where n == len(urls)
), 정렬 할 때 처음 n 번, 그룹화 할 때 두 번째 n 번. N 번 만들 수 있습니까?
먼저 튜플로 접미사를 추가하는 경우, 당신은 다음 정렬하고 GROUPBY 다음과 같이 재 계산하지 않고도 할 수 있습니다 :이 예에서
from itertools import groupby
from tldextract import extract
urls = ["www.example.com", "www.mytest.org", "www.test.com", "www.abc.com"]
urls = [(extract(url).suffix, url) for url in urls]
for k, g in groupby(sorted(urls), key=lambda x: x[0]):
print k, list(g)
당신은 얻을 것이다 :
을 따라 모든 URL의 목록이 얼마나 큰지, 추출 된 모든 항목의 목록을 한 번 작성한 다음 색인 목록의 색인을 및 그룹에 사용하면 속도가 빨라질 수 있습니다.210 :
from itertools import groupby, count
from tldextract import extract
c1, c2 = count(), count()
lst = [extract(x).suffix for x in urls]
urls = sorted(urls, key=lambda _: lst[next(c1)])
grouped_urls = groupby(urls, key=lambda _: lst[next(c2)])
이것의 단점은 2n
번 O(1)
인덱싱을 할 수있을거다,하고 목록에 extract(x)
의 총 시간이 시간보다 훨씬 더 많은 경우 최대 속도는 한계보다 더 될 것입니다 새 목록의 색인을 생성하는 데 사용됩니다.