Tôi có hai triển khai những tính toán chiều dài của một máy phát điện hữu hạn, trong khi vẫn giữ các dữ liệu để chế biến tiếp:Chiều dài của một máy phát điện hữu hạn
def count_generator1(generator):
'''- build a list with the generator data
- get the length of the data
- return both the length and the original data (in a list)
WARNING: the memory use is unbounded, and infinite generators will block this'''
l = list(generator)
return len(l), l
def count_generator2(generator):
'''- get two generators from the original generator
- get the length of the data from one of them
- return both the length and the original data, as returned by tee
WARNING: tee can use up an unbounded amount of memory, and infinite generators will block this'''
for_length, saved = itertools.tee(generator, 2)
return sum(1 for _ in for_length), saved
Cả hai đều có những hạn chế, cả hai đều thực hiện công việc. Ai đó có thể bình luận về họ, hoặc thậm chí cung cấp một lựa chọn tốt hơn?
Không có cách nào để biết độ dài của một trình tạo lặp lại mà không tốn toàn bộ điều. –
Tôi biết. Đó không phải là câu hỏi – dangonfast
lưu ý: nếu nếu bạn không cần độ dài chính xác thì bạn có thể sử dụng ['operator.length_hint()' (Python 3.4+)] (http://docs.python.org/dev/library /operator#operator.length_hint) trả về độ dài ước tính mà không cần dùng trình lặp. Xem [PEP 424 - Phương pháp hiển thị gợi ý độ dài] (http://www.python.org/dev/peps/pep-0424/) – jfs