มีนิพจน์พิเศษใน Python ที่เรียกว่า derivation หน้าที่ของมันคือนำโครงสร้างข้อมูลมาเป็นอินพุต จากนั้นกรองและคำนวณ และสุดท้ายส่งออกโครงสร้างข้อมูลอื่น ตามโครงสร้างข้อมูลที่แตกต่างกัน สามารถแบ่งออกเป็นรายการความเข้าใจ ชุดความเข้าใจ และความเข้าใจในพจนานุกรม ก่อนอื่นมาเน้นที่ความเข้าใจรายการที่ใช้บ่อยที่สุดกันก่อน
ก่อนอื่น มาดูรูปแบบไวยากรณ์ของความเข้าใจรายการกันก่อน:
listname=[expressionforvariablein วัตถุ (ifcondition)]
listname: ชื่อของรายการที่สร้างขึ้นใหม่
การแสดงออก: การแสดงออก
ตัวแปร: ชื่อตัวแปร
(ถ้าเงื่อนไข): ใช้เพื่อเลือกรายการที่ตรงตามข้อกำหนดจากออบเจ็กต์
เราเริ่มจากสามด้าน ได้แก่ รายการค่าภายในช่วงที่ระบุ รายการเงื่อนไขที่ระบุ และรายการที่ประกอบด้วยองค์ประกอบที่ตรงตามเงื่อนไข
ก่อนอื่นมาลองคิดดูว่าเมื่อใดที่เราต้องสร้างตัวเลข 10 ตัวและเก็บไว้ในรายการ มาดูวิธีทั่วไปกันก่อน:
listname=[]foriinrange(10):listname.append(i)พิมพ์(listname)
ผลลัพธ์คือ:
[0,1,2,3,4,5,6,7,8,9]
การใช้รายการความเข้าใจต้องการเพียงบรรทัดเดียวเท่านั้น:
listname=[iforiinrange(10)]
ผลลัพธ์คือ:
[0,1,2,3,4,5,6,7,8,9]
วิธีการนี้ทำให้การดำเนินงานของเราง่ายขึ้นเมื่อกำหนดรายการ
สมมติว่าเรารู้ว่ารายการคือ listname = [1,3,5,6,7,9,10,23,26,28,64,98] เราต้องการค้นหาและเพิ่มตัวเลขทั้งหมดลงไปด้วย 5 วิธีธรรมดา:
listname=[1,3,5,6,7,9,10,23,26,28,64,98]foriinrange(len(listname)):listname[i]+=5print(listname)
ผลลัพธ์คือ:
[6,8,10,11,12,14,15,28,31,33,69,103]
การใช้ list comprehension นั้นกระชับมากเช่นกัน:
listname=[1,3,5,6,7,9,10,23,26,28,64,98]listname=[i+5foriinlistname]
เอาท์พุท:
[6,8,10,11,12,14,15,28,31,33,69,103]
ความเข้าใจรายการประเภทนี้ซับซ้อนกว่าสองรายการแรก แต่สามารถทำให้โค้ดง่ายขึ้นได้
มาดูตัวอย่างเพื่อดูรูปแบบโค้ด:
เป็นที่รู้กันว่ารายการคือ listname = [8,33,53,64,73,95,101,123,126,164,198] จากนั้นเราต้องหาตัวเลขในรายการที่น้อยกว่าและมากกว่า 100 แล้วคูณด้วย 0.8 และสุดท้าย กลับไปยังรายการ
หากเราใช้วิธีปกติ:
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[]#Create a new list to store foriinrange(len(listname)):#Index value traversal iflistname[i]>100:#ค้นหาตัวเลขที่มากกว่า 100 listname[ i]*=0.8#คูณด้วย 0.8 newlist.append(listname[i])#Add to new list print(newlist)
ผลลัพธ์คือ:
[96.0,104.0,112.0,128.0,144.0,160.0]
ใช้ความเข้าใจรายการ:
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[i*0.8foriinlistnameifi>100]พิมพ์(รายการใหม่)
ผลลัพธ์ที่ได้:
[96.0,104.0,112.0,128.0,144.0,160.0]
มาวิเคราะห์ตามโครงสร้างไวยากรณ์ของตัวอย่างนี้:
เราสามารถใช้วิธีนี้เมื่อใช้ความเข้าใจรายการที่ซับซ้อน อันดับแรกเราเลือกองค์ประกอบที่ตรงตามเงื่อนไข (คำสั่งแบบมีเงื่อนไข) จากอ็อบเจ็กต์ จากนั้นจึงประมวลผลนิพจน์เอาต์พุต และสุดท้ายจัดเก็บไว้ในรายการ โดยสร้าง a รายการใหม่
ต่อไปนี้เป็นตัวอย่างคำถามที่คุณสามารถลองได้
1. รายการ [1,2,13,22,25] โปรดใช้รายการความเข้าใจเพื่อแยกตัวเลขที่มากกว่า 10 ยกกำลังสองแต่ละตัวเลข และสุดท้ายก็ส่งออก
ผลการวิ่งคือ:
[169,484,625]
รหัสมีดังนี้คุณสามารถลองกรอกคำตอบอ้างอิงให้สมบูรณ์ก่อน
รายการ=[1,2,13,22,25]รายการใหม่=[i*iforiinlistifi>10]พิมพ์(รายการใหม่)
2. ใช้ list comprehension เพื่อค้นหาเลขคี่ทั้งหมดในรายการและสร้างรายการใหม่ list= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
รหัสมีดังนี้:
รายการ=[1,2,3,4,5,6,7,8,9,10]รายการใหม่=[iforiinlistifi%2==1]พิมพ์(รายการใหม่)
ผลลัพธ์คือ:
[1,3,5,7,9]