ติดตาม blog ของพี่โบ๊ตได้ที่ http://sdayu.blogspot.com/
โจทย์มีอยู่ว่า
ที่มาของโจทย์ http://sdayu.blogspot.com/2013/04/blog-post_30.html
A = [random.randint(1, 150) for i in range(0,100)]
หาค่าเฉลี่ยของสมาชิกของ A ที่ละ 10 ค่า ให้อยู่ในรูปของลิสท์
หลังจากที่ผมนั่งอ่าน syntax การใช้งาน python อยู้่ช่วงระยะหนึ่ง ก็เขียน Code แก้ปัญหาดังกล่าวได้ดังนี้
import random A = [random.randint(1, 150) for i in range(0,100)] C=[] for i in range(0,10): B= [A[j] for j in range(i*10,(i*10)+10)] C.append(sum(B)/len(B)) print(C)
แต่ว่าเฉลยของพี่โบ๊ตสั้นกว่า ลองไปดูกันครับ
import random A = [random.randint(1, 150) for i in range(0,100)] length = 10 average = [sum(A[a:a+length]) / len(A[a:a+length]) for a in range(0, len(A), length)] print(average)เราใช้ความสามารถทำ subset โดยใช้เครื่อง (Colon,:) ครับเช่น A=[1,2,3,4,5,6,7,8,9,10] print A[1:4] ผลลัพธ์ก็จะออกมาคือ [2,3,4,5]
**หมายเหตุ คำสั่ง range(1,6) ใน python เวอร์ชั่น 2.7 จะ return ออกเป็นลิสด์
ในขณะที่ python 3.3 จะ return ออกมาเป็น object ถ้าเราสั่ง print(range(1,6)) ใน python3 จะได้ผลลพัธ์เป็น object แต่หากเราต้องการให้ผลลัพธ์ออกเป็น list เราจะต้องทำการ casting ค่า โดย list(range(1,6))
:D สู้ๆ
ตอบลบสู้ๆ ครับ ^^
ตอบลบ