List Comprehension
ทบทวน: สร้างรายการข้อมูลทีละ item ด้วยลูป
ทำได้ด้วยการสร้างตัวแปรที่มีค่าเริ่มต้นเป็น empty list แล้วใช้ For-loop หรือ While-loop เพิ่ม item ใหม่ ๆ เข้าไปในแต่ละรอบ
Note
ให้สร้าง list ที่มีหน้าตาแบบนี้ [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] โดยใช้ While-loop เก็บไว้ในตัวแปรชื่อ a แล้วแสดงผล
Note
ทบทวน: while-loop (Module 6)
สร้าง list เดิม [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] แต่รอบนี้ให้ใช้ for-loop เก็บในตัวแปร a แล้วแสดงผล
กำหนดสมการ \(f(x) = x^2 + 2x + 1\) โดยที่ \(x = [0.5, 2.3, 5.0, 10, 20, 25]\)
จากสมการเดิม \(f(x) = x^2 + 2x + 1\) และ \(x = [0.5, 2.3, 5.0, 10, 20, 25]\)
ให้หาค่า \(f(x)\) เฉพาะเมื่อ \(x > 3.0\) (เก็บเป็นทศนิยม 2 ตำแหน่ง) แล้วแสดงผล
Note
ทบทวน: if condition (Module 5)
ให้สร้างฟังก์ชันประมวลผลลิสต์ z แล้วคืนผลลัพธ์เป็นลิสต์ data
myFunc1(z) — คำนวณ \(x^2\) (ทศนิยม 2 ตำแหน่ง) ของทุก itemmyFunc2(z) — คำนวณ \(x^2\) เฉพาะเมื่อ \(z \geqslant 4\)เรียกใช้ทั้งสองฟังก์ชันด้วย input xs = [3.2, 4, 5, 6, 8, 1, 1]
Note
เขียนการสร้าง List ให้กระชับในบรรทัดเดียว
List comprehension คือรูปแบบคำสั่งใน Python ที่ใช้สร้างรายการ List ของข้อมูล โดยอาศัยส่วนประกอบ 3 ส่วน
แล้วนำผลลัพธ์จากการประมวลผลแต่ละรอบไปเพิ่มเป็น item ต่อท้ายใน List ให้อัตโนมัติ
a = [ 2*x+1 for x in range(5) ]
x ไปเรื่อย ๆสร้าง list [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] (จากข้อ 1) โดยใช้ List comprehension เก็บในตัวแปร a แล้วแสดงผล
ให้ผลลัพธ์เช่นเดียวกับการใช้ for-loop แต่เขียนสั้นกว่า
ในกรณีที่ต้องการกำหนดเงื่อนไขในการทำงาน ทำได้โดยเพิ่มคำสั่ง if ไว้ด้านท้ายของ for-loop
[ expr for x in data if condition ]
จากตัวเลขในช่วง [0, 100] ถ้าค่าอยู่ระหว่าง [51, 76) ให้คำนวณด้วยสูตร \(2x+1\) แล้วเก็บในตัวแปร N1 แล้วแสดงผล (ใช้ List comprehension)
Note
จากข้อมูล xs = [15,6,65,53,34,5,99,70,53,68,0,74,42,58,56,26] ถ้า \(x > 5\) ให้คำนวณด้วยสูตร \(x^2+2x+1\) แล้วแสดงผล (ใช้ List comprehension)
สามารถเขียน List comprehension ไว้ภายในฟังก์ชัน เพื่อสร้างและคืนค่าลิสต์ได้
เขียนฟังก์ชันสร้างลิสต์ โดยรับพารามิเตอร์เป็นจำนวนสมาชิก และให้สมาชิกแต่ละตัวมีค่าเท่ากับ \(x^2\) เมื่อ x คือ index ของสมาชิกตัวนั้น
รับข้อมูลจากคีย์บอร์ดด้วย input().split() จะได้ลิสต์ของ string
ใช้ List comprehension เรียก int() / float() กับทุก item เพื่อแปลงชนิดข้อมูล
[ float(d) for d in data ]
Note
List ที่มี item ภายในเป็น List อีกชั้น (list of lists)
List แบบ 2 มิติ คือ List ที่มี item ภายในเป็น List อีกชั้นหนึ่ง (list of lists)
Note
a2d มี item ย่อยเป็น List 4 รายการ อ้างอิงด้วย a2d[index]
a2d[0] = [0,1,2]a2d[1] = [3,4,5]a2d[2] = [6,7,8]a2d[3] = [0,0,0]สร้าง List ขนาด n-row × m-column ที่ทุก item มีค่าเป็น 0
ให้สร้าง 2D-list ขนาด 3 row × 4 column ที่มีสมาชิกทุกตัวเป็น 0
ใช้ List comprehension ซ้อนกัน 2 ชั้น — ชั้นนอกคือ row, ชั้นในคือ column
ให้สร้าง 2D-list ขนาด 3 row × 4 column ที่มีสมาชิกเป็น index ของ column
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
วนลูปสองชั้นเพื่อหา maximum ของแต่ละ row พร้อมหาผลรวมและค่าเฉลี่ยทั้งหมด
a = [[0,1,3],[1,2,9],[4,2,1],[3,6,2],[8,4,5]]
nrow = len(a) # จำนวน row = 5
ncol = len(a[0]) # จำนวน column = 3
rmax = [-1]*nrow # ค่าเริ่มต้นของ max แต่ละ row
sm = 0
for i in range(nrow):
for j in range(ncol):
if a[i][j] > rmax[i]: # หา max ของ row i
rmax[i] = a[i][j]
sm += a[i][j]
print(f"a[{i}][{j}]={a[i][j]} ", end='')
print(f", max[{i}]={rmax[i]}")
print(f"Total={sm}")
print(f"Average={sm/(nrow*ncol):.2f}")Note
สร้าง List ด้วย Loop
.append() ในลูปList Comprehension
[ expr for x in data if cond ]int/float) ได้List แบบ 2 มิติ
a[x][y] — x = row, y = column[ [0]*m for i in range(n) ]Tip
List comprehension = loop + ประมวลผล + เงื่อนไข ในบรรทัดเดียว
🏠 259201 — Module 10 | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่