ฟังก์ชัน map()
มาลองใช้ mapping กัน!
ยังจำวิธีทำงานของ zip() ได้ไหม? มันจะรวม Iterable ที่กำหนดเข้าด้วยกัน โดยจับคู่ elements ที่มี index เดียวกันเข้าเป็น tuple เดียวกัน และขนาดของผลลัพธ์จะถูกจำกัดตาม Iterable ที่สั้นที่สุด
โจทย์ของคุณคือสร้างฟังก์ชัน my_zip() ขึ้นมาเอง โดยใช้ *args แทน Iterable จำนวนไม่จำกัด เช่น list, string, tuple เป็นต้น ต่างจาก zip ตรงที่ my_zip() ควรคืนค่าเป็น list ของ tuple แทน
หมายเหตุ: ตามปกติควรตรวจสอบก่อนว่า args มีข้อมูลที่เป็น Iterable หรือไม่ แต่เพื่อความเรียบง่าย เราจะละขั้นตอนนี้ไว้ก่อน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python
คำแนะนำการฝึกหัด
- ดึงค่า
lengthsจากargsโดยใช้map()แล้วหาความยาวที่น้อยที่สุด - ภายใน loop ให้สร้าง
mappingโดยใช้map()เพื่อดึง elements จากargsที่มี indexiเดียวกัน - แปลง mapping เป็น tuple แล้ว append เข้าไปใน
tuple_list
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
def my_zip(*args):
# Retrieve Iterable lengths and find the minimal length
lengths = list(map(____, ____))
min_length = ____
tuple_list = []
for i in range(0, min_length):
# Map the elements in args with the same index i
mapping = map(____, args)
# Convert the mapping and append it to tuple_list
tuple_list.append(____(____))
return tuple_list
result = my_zip([1, 2, 3], ['a', 'b', 'c', 'd'], 'DataCamp')
print(result)