Tôi đang tìm cách lặp lại đầu tiên trên các mục n
đầu tiên của một lần lặp lại (upd: không phải danh sách trong trường hợp phổ biến, cho các danh sách mọi thứ đều tầm thường) và điều quan trọng là phải làm điều này càng nhanh càng tốt. Đây là cách tôi làm điều đó ngay bây giờ:Lặp lại nhanh chóng trên các mục đầu tiên n của một lần lặp (không phải danh sách) trong python
count = 0
for item in iterable:
do_something(item)
count += 1
if count >= n: break
Không có vẻ gọn gàng với tôi. Một cách khác để thực hiện việc này là:
for item in itertools.islice(iterable, n):
do_something(item)
Điều này có vẻ tốt, câu hỏi này có đủ nhanh để sử dụng với một số (các) trình tạo không? Ví dụ:
pair_generator = lambda iterable: itertools.izip(*[iter(iterable)]*2)
for item in itertools.islice(pair_generator(iterable), n):
so_something(item)
Nó có chạy đủ nhanh so với phương pháp đầu tiên không? Có cách nào dễ dàng hơn để làm điều đó không?
Cách duy nhất để trả lời "đủ nhanh" là để chuẩn đó cho mình. –
Xem thêm: http://stackoverflow.com/questions/2688079/how-to-iterate-over-the-first-n-elements-of-a-list – outis
Tại sao "khá quan trọng để làm điều này nhanh như khả thi"? Bạn có thể biện minh điều này với kết quả pstats cho một trường hợp sử dụng thực tế? Tôi nghi ngờ rằng giải pháp của bạn với 'islice' sẽ thực sự chứng minh giải pháp hiệu quả nhất hợp lý, nhưng tất nhiên chúng ta không biết mà không có thời gian. –