import itertools as IT
groups = IT.groupby([(1,2,3),(1,2),(1,2),(3,4,5),(3,4)], key=len)
groups = (list(group) for key, group in groups)
def grouped(iterable, n):
return IT.izip(*[iterable]*n)
for p1, p2 in grouped(groups, 2):
print p1, p2
는
[(1, 2, 3)] [(1, 2), (1, 2)]
[(3, 4, 5)] [(3, 4)]
를 산출
게시 한 코드는 매우 흥미 롭습니다. 평범한 문제와 미묘한 문제가 있습니다.
itertools.groupby는 각 반복마다 키와 그룹을 출력하는 반복기를 반환한다는 것이 일반적인 문제입니다. 내가 완전히 이해 정말 모르겠어요 - 당신이 그룹 만이 아닌 키에 관심이 있기 때문에 , 당신은 미묘한 문제는 설명하기 어렵다
groups = (group for key, group in groups)
뭔가를해야합니다. 여기에 내 생각은 : groupby
에 의해 반환 된 반복자는 반복자로 입력,
[(1,2,3),(1,2),(1,2),(3,4,5),(3,4)]
을 돌았 다. groupby 반복자가 기본 데이터 반복자에 래핑 된 것은 csv.reader
이 기본 파일 객체 반복자를 감싸는 방법과 유사합니다. 이 반복자와 패스 하나만 통과하면됩니다. groups
의 항목을 페어링하는 과정에서 itertools.izip 함수를 사용하면 groups
반복기가 첫 번째 항목에서 두 번째 항목으로 진행됩니다. 반복기를 한 번 통과하기 만하면 첫 번째 항목이 소비되었으므로 list(g[1])
으로 호출하면이 항목은 비어 있습니다.
이 문제에 대한
그리 만족
수정 목록으로 groups
의 반복자를 변환하는 것입니다 :
groups = (list(group) for key, group in groups)
너무 성급하게 그들을
itertools.izip
을 소비하지 않습니다. 편집 : 두 번째 생각에,이 수정은 그리 나쁘지 않습니다.
groups
은 반복자로 남아 있으며 사용 된대로
group
만 목록으로 바꿉니다.
귀하의 편집 : 아주 사악한 즉 보통 : – root