나는 반복자 iterator
과 인덱스 목록 indices
(가능한 반복)을 가지고 있으며, 나는 그 반복자에서 그 요소들을 추출하고 싶다. 지금 내가하고있는 순간에파이썬 반복자에 대한 인덱스
indices = sorted(indices)
deltas = [indices[0]] + [indices[i+1] - indices[i] for i in range(len(indices) - 1)]
output = []
for delta in deltas:
for i in range(delta):
datum = next(iterator)
output.append(datum)
루프의 두 레이어가 필요합니까? itertools
으로 트릭을 놓치고 있습니까?
예, 수행하려는 것을 재현하는 데 도움이되는 몇 가지 정렬 예제를 제공해야합니다. 나는 인덱스가'int'의 일부 목록이지만, 다음과 같은 라인을 가지고 있습니다 :'indices [0] + [indices [i + 1] - indices [i] 범위의 i (len (indices) - 1)]' 이 경우 작동합니다 -'int'에'list'를 추가 할 수 없습니다. –
또한 인덱스는 일종의 시퀀스 유형을 의미합니다. 'iterators'는 시퀀스에 대해 단일 패스를 사용합니다 : * 인덱스를 시퀀스로 직접 인덱싱하지 않는 이유는 무엇입니까? –
코드에 비해 명확한 개선 사항은 없다고 생각합니다. 'itlice'와 같은 itertools 함수는 반복 된 인덱스를 가지고 있기 때문에 당신을 위해 작동하지 않을 것입니다. 한 가지 고려해야 할 점은 : iterator가 단지 적은 양의 데이터만을 포함하고 (메모리에 적합 할 수 있고 인덱스의 수보다 더 큰 순서가 아닌) 데이터를 단순히 소비하는 것이 더 쉬울 수도 있습니다. 목록을 채우고, 사소한 목록 이해를 사용하여 요청 된 값을 가져옵니다. – Blckknght