나는 this과 this의 질문을 보았으며 동일한 효과를 얻고 싶습니다. 오직 itertool.izip
만 사용하면 효율적이었습니다. 우편 (처럼python에서 itertools.izip의 역함수는 무엇입니까?
) 그것은 내가 메모리에 모든 값을 맞지 않을 수 있기 때문에
내가 반복자를 필요로하는 반복자 대신의 목록을 반환하는 것을 제외 : itertool.izip
의 설명서에서
그래서 대신 생성기를 사용하고 값을 반복합니다.
좀 더 구체적으로 말하면, 저는 세 개의 값 튜플을 생성하는 생성자를 가지고 있습니다. 반복하는 대신 세 개의 함수에 세 개의 값 목록을 제공하고 각 목록은 튜플의 단일 위치를 나타냅니다.
세 튜플 값 중에서 큰 값 (메모리 소비량)이 하나만있는 경우 (data
이라고 함) 다른 두 값에는 메모리가 거의 필요하지 않은 값만 포함되어 있으므로 data
값의 "값 목록"을 반복하는 것은 data
값을 하나씩 소비하고 작은 값을 캐싱하여 저에게 효과적 일 것입니다.
한 번에 하나의 "값 목록"을 생성하는 스마트 방법을 생각해 볼 수 없습니다. 왜냐하면 튜플의 큰 값에 따라 가끔씩 3 값 터플의 인스턴스를 제거하기로 결정할 수 있기 때문입니다.
널리 제안 zip
솔루션을 사용하여 비슷한에이의 "인수 목록을 풀고"부분에
>>> zip(*[('a', 1), ('b', 2), ('c', 3), ('d', 4)])
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)]
결과 (* [...]) 전체 반복자를 통해 전체 반복을 유발하고, (나는 추측한다) 모든 결과를 메모리에 캐시한다.
마스크 목록을 만들 수 있습니다 (유지할 작은 값에 대해서는 참/거짓 임). 그러나 나는 더 깨끗한 방법을 찾고 있습니다. 다른 모든 것이 실패하면, 나는 그것을 할 것입니다.
따라서 '데이터'값은 3 튜플의 세 번째 항목에 들어가고 첫 번째 항목과 두 번째 항목에 더 짧은 목록이 포함될 수 있습니까? 그 짧은 목록이 고갈되었을 때 일어날 일을 설명해 주시겠습니까? 두 개의 매우 짧은 목록과 약간 긴 목록을 사용하여 명시 적으로 예제를 제공하는 것이 바람직합니다. – barny
@barny 목록 자체의 길이는 모두 동일하므로 목록의 개별 값 크기 (즉, 메모리 요구 사항)에 대해 이야기하고있었습니다. 데이터 값이 너무 커서 메모리를 함께 보관할 수 없습니다. – NirIzr
실제로 프레이 징이 불분명하고 편집되었습니다. – NirIzr