เป็นไปได้ที่ซ้ำกัน:
คุณแบ่งรายการออกเป็นชิ้นขนาดเท่า ๆ กันใน Python ได้อย่างไร?
ฉันประหลาดใจที่ไม่พบฟังก์ชัน "แบตช์" ที่จะใช้เป็นอินพุตที่สามารถทำซ้ำได้
ตัวอย่างเช่น:
for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
หรือ:
for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
ตอนนี้ฉันเขียนสิ่งที่ฉันคิดว่าเป็นเครื่องกำเนิดไฟฟ้าที่ค่อนข้างง่าย:
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
แต่ข้างต้นไม่ได้ให้สิ่งที่ฉันคาดหวัง:
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]
ดังนั้นฉันพลาดอะไรไปและนี่อาจแสดงให้เห็นว่าฉันขาดความเข้าใจอย่างสมบูรณ์เกี่ยวกับเครื่องกำเนิด python ใครจะสนใจชี้ฉันไปในทิศทางที่ถูกต้อง?
[แก้ไข: ในที่สุดฉันก็รู้ว่าพฤติกรรมข้างต้นเกิดขึ้นเฉพาะเมื่อฉันเรียกใช้สิ่งนี้ภายใน ipython แทนที่จะเป็น python เอง]