Python

ฝึกเขียนฟังชั่นนับจำนวนไอเทมใน List ง่ายๆด้วย Python

tutorial นี้เราจะมาสอนเขียน Python function ง่ายๆเพื่อใช้วิเคราะห์ข้อมูล โดย input คือ list of items ส่วน output จะออกมาเป็น dictionary (key คือชื่อ item และ value คือจำนวน item นั้นๆ)

สำหรับเพื่อนๆที่อยากทำตาม tutorial นี้ ต้องเข้าใจสองเรื่องนี้ก่อน

  • list vs. dictionary
  • control flow (if-else และ for loop)

ถ้าใครยังใหม่กับ Python ลองดูคอร์สฟรีของเราก่อนที่ https://datarockie.com/p/python-for-non-programmer

Count Animals

โจทย์คือเราต้องการนับจำนวน dog, cat, hippo ที่อยู่ใน list animals วิธีการที่เราจะแก้ปัญหาใน Python จะเริ่มจากการสร้าง empty dictionary ขึ้นมาก่อน (line 8)

ตั้งแต่ line 12-16 คือการเขียน for loop เพื่อนับ item ทีละตัวที่อยู่ใน animals ภายใน for loop เราเขียน if-else เพื่อเช็คชื่อ animal ตัวนั้นและอัพเดท key-value ใน result dictionary

# input
animals = ['dog', 'cat', 'cat', 'dog', 'dog', 'dog', 'cat', 'dog', 'hippo']
# expected output
# result = {'dog':5, 'cat':3, 'hippo':1}
# create empty dict to save our output
result = {}
# we write for loop and if-else
# to check every item in the animals list
for animal in animals:
if animal in result:
result[animal] += 1
else:
result[animal] = 1
# print output
print(result)
view raw .py hosted with ❤ by GitHub

if animal in result: คือเงื่อนไขที่เราใช้ตรวจสอบว่ามีชื่อ animal ตัวนั้นอยู่ใน result dictionary ของเราหรือยัง?

  • if True – เราจะอัพเดท result ด้วยโค้ด result[animal] += 1
  • if False – เราจะอัพเดท result ด้วยโค้ด result[animal] = 1

ทำไม if False เราถึงเขียน result[animal] = 1? เพราะ for loop รอบนั้นคือการเจอชื่อ animal ตัวนั้นเป็นครั้งแรก เราเลยอัพเดท result dictionary {key: value} ด้วย {ชื่อ animal: 1}

เมื่อ for loop วิ่งครบทุก item ที่อยู่ใน list animals แล้ว เราจะได้ result dictionary หน้าตาแบบนี้ {‘dog’:5, ‘cat’:3, ‘hippo’:1} ลอง print(result) ออกมาตรวจสอบความถูกต้องอีกครั้งหนึ่ง

Function

เราสามารถเขียน wrap โค้ดด้านบนเป็น function เพื่อนำไปใช้นับ items ใน list อื่นได้

ข้อดีของ function คือ reusable ใช้ซ้ำได้เรื่อยๆ ไม่ต้องเขียนโค้ดใหม่ให้เมื่อยมือ 😛

ใน Python เราสร้างฟังชั่นใช้เองง่ายๆด้วย def keyword บรรทัดสุดท้ายของฟังชั่นเราใช้ return keyword เพื่อ return ผลลัพธ์ที่ได้จากฟังชั่น ดูโค้ดตัวอย่างด้านล่าง

# write a reusable function
def count_item(input_list):
"""count item in a list, return a dict"""
result = {}
for item in input_list:
if item in result:
result[item] += 1
else:
result[item] = 1
return result
view raw .py hosted with ❤ by GitHub

Testing

ลองทดสอบ count_item() กับ list อื่นๆ ว่ามันให้ผลลัพธ์อย่างที่เราต้องการหรือเปล่า

# input
animals = ['dog', 'cat', 'cat', 'dog', 'dog', 'dog', 'cat', 'dog', 'hippo']
genders = ['M', 'F', 'F', 'F', 'M']
balls = ['red', 'red', 'blue', 'blue', 'blue', 'black']
# test function
print(count_item(animals))
print(count_item(genders))
print(count_item(balls))
view raw .py hosted with ❤ by GitHub

Well done !! ใน tutorial นี้เราเรียนวิธีการเขียนฟังชั่นๆง่าย เพื่อนับจำนวน items ใน list และ return ผลลัพธ์ในรูปแบบของ dictionary

1 comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.