Có thể trùng lặp:
Làm cách nào để bạn chia danh sách thành các phần có kích thước đồng đều trong Python?
Tôi rất ngạc nhiên vì tôi không thể tìm thấy một hàm "batch" sẽ lấy làm đầu vào là một tệp có thể lặp lại và trả về một tệp lặp có thể lặp lại.
Ví dụ:
for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
hoặc là:
for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
Bây giờ, tôi đã viết những gì tôi nghĩ là một máy phát điện khá đơn giản:
def batch(iterable, n = 1):
current_batch = []
for item in iterable:
current_batch.append(item)
if len(current_batch) == n:
yield current_batch
current_batch = []
if current_batch:
yield current_batch
Nhưng những điều trên không mang lại cho tôi những gì tôi mong đợi:
for x in batch(range(0,10),3): print x
[0]
[0, 1]
[0, 1, 2]
[3]
[3, 4]
[3, 4, 5]
[6]
[6, 7]
[6, 7, 8]
[9]
Vì vậy, tôi đã bỏ lỡ điều gì đó và điều này có thể cho thấy sự thiếu hiểu biết của tôi về trình tạo python. Có ai muốn chỉ cho tôi đi đúng hướng không?
[Chỉnh sửa: Cuối cùng tôi nhận ra rằng hành vi trên chỉ xảy ra khi tôi chạy điều này trong ipython chứ không phải chính python]