나는 itertool.permutation
발전기의 목록의 제품을 생성해야하고, 다음 코드를 사용합니다itertools.product : 성능을 향상시키는 방법은 무엇입니까?
def iter_version():
l = [itertools.permutations(range(10)) for _ in range(10)]
g = itertools.product(*l)
for i in g:
yield i
을하지만이 코드는 너무 느립니다. 내 바탕 화면에서 16 초 걸립니다. cProfile은이 함수가 16 초 걸린다는 것을 제외하고 아무 것도 보여주지 않습니다.
난 그냥이 같은 루프에 대한 몇 가지 미친 만드는 경우이 거의 즉시 실행
def for_loop():
l = [itertools.permutations(range(10)) for _ in range(10)]
for i0 in l[0]:
for i1 in l[1]:
for i2 in l[2]:
for i3 in l[3]:
for i4 in l[4]:
for i5 in l[5]:
for i6 in l[6]:
for i7 in l[7]:
for i8 in l[8]:
for i9 in l[9]:
yield (i0, i1, i2, i3, i4, i5, i6, i7, i8, i9)
합니다.
내 경우에는 퍼뮤 테이션 생성기 목록이 고정 크기가 아니므로 for 루프 버전을 사용할 수 없습니다.
감사합니다. @DSM. 'next (iter_version())'은 내 바탕 화면에서 16 초 걸린다. 파이썬의 이슈 트래커 인 http://bugs.python.org/issue10109에서이 버그를 발견했습니다. itertools.product'는 반복문을 나중에 마술을 수행하는 것보다 먼저 변환 할 것입니다. – yegle
내 특정 사용 사례에 대한 해결책을 찾았으며 아래에 게시 할 것입니다. – yegle