มีลิสต์ที่ประกอบด้วยทั้งสตริงและตัวเลข ต้องการบวกเฉพาะตัวเลข โดยข้ามสตริง
วิธีที่ 1: ใช้ filter และ isinstance
isinstance(x, int) ตรวจสอบว่า x เป็น int หรือไม่ ใช้ filter กรอง แล้ว sum
ตัวอย่าง
listA = [1, 14, 'Mon', 'Tue', 23, 'Wed', 14, -4]
print("Given list:", listA)
res = sum(filter(lambda i: isinstance(i, int), listA))
print("Sum of numbers in listA:", res)
ผลลัพธ์
Given list: [1, 14, 'Mon', 'Tue', 23, 'Wed', 14, -4] Sum of numbers in listA: 48
วิธีที่ 2: ใช้ List Comprehension
เขียนในรูป list comprehension แทน filter คล้ายกันแต่อ่านง่ายกว่าบางคน
ตัวอย่าง
listA = [1, 14, 'Mon', 'Tue', 23, 'Wed', 14, -4]
print("Given list:", listA)
res = sum([x for x in listA if isinstance(x, int)])
print("Sum of numbers in listA:", res)
ผลลัพธ์
Given list: [1, 14, 'Mon', 'Tue', 23, 'Wed', 14, -4] Sum of numbers in listA: 48
ขยายความเป็น float: ใช้ isinstance(x, (int, float)) เพื่อรองรับทศนิยมด้วย
res = sum([x for x in listA if isinstance(x, (int, float))])