วิธีจัดเรียงรายการใน Python

เผยแพร่แล้ว: 2022-03-30

บทความนี้จะสอนวิธีจัดเรียงรายการใน Python

ใน Python คุณสามารถใช้เมธอด sort() เพื่อเรียงลำดับรายการ หรือคุณสามารถใช้ฟังก์ชัน sorted() ในตัวเพื่อรับสำเนาที่จัดเรียงของรายการ

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้:

  • ไวยากรณ์ของเมธอด sort() และฟังก์ชัน sorted()
  • ตัวอย่างโค้ดของการเรียงลำดับรายการจากน้อยไปมากและจากมากไปน้อย
  • ปรับแต่งการเรียงลำดับโดยใช้พารามิเตอร์ key
  • ความแตกต่างระหว่าง sort() กับ sorted()

เริ่มกันเลย!

ไวยากรณ์ของ Python sort() Method

วิธีการ sort() ทำหน้าที่ในรายการ Python และจัดเรียงรายการให้เข้าที่—และแก้ไขรายการดั้งเดิม

ไวยากรณ์สำหรับวิธีการ sort() ของ Python คือ:

 <list>.sort(reverse = True | False, key = <func>)

มาแยกวิเคราะห์ไวยากรณ์ด้านบนกัน

  • <list> เป็นอ็อบเจ็กต์รายการ Python ที่ถูกต้อง
  • reverse เป็นพารามิเตอร์ ทางเลือก ที่รับ True หรือ False
  • ค่าเริ่มต้นของ reverse คือ False และรายการจะเรียงลำดับจากน้อยไปมาก ให้ True เพื่อเรียงลำดับรายการจากมากไปหาน้อย
  • key ยังเป็นพารามิเตอร์ ทางเลือก ที่ตั้งค่าเป็น <func>
  • <func> สามารถเป็นฟังก์ชันในตัวหรือฟังก์ชันที่ผู้ใช้กำหนดเองได้

ในส่วนถัดไป คุณจะเริ่มเขียนโค้ดตัวอย่างง่ายๆ

วิธีจัดเรียงรายการ Python ตามลำดับจากน้อยไปมาก

พิจารณารายการ nums หากต้องการเรียงลำดับรายการจากน้อยไปมาก คุณสามารถเรียกใช้เมธอด sort() ในรายการได้

เรียกใช้ข้อมูลโค้ดต่อไปนี้

 nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25]

รายการ nums ได้รับการเรียงลำดับจากน้อยไปมาก และรายการเดิมได้รับการแก้ไข สิ่งนี้เรียกว่า การเรียงลำดับแบบแทนที่

วิธีจัดเรียงรายการ Python ตามลำดับจากมากไปน้อย

หากต้องการเรียงลำดับรายการจากมากไปหาน้อย ให้ตั้งค่า reverse เป็น True ดังที่แสดงด้านล่าง

 nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]

คุณจะเห็นว่าขณะนี้รายการถูกจัดเรียงจากมากไปหาน้อย

วิธีใช้คีย์กับ Python sort() Method

ในส่วนนี้ ลองใช้พารามิเตอร์ key และปรับแต่งการเรียงลำดับ

ที่นี่ mod5() เป็นฟังก์ชันที่ใช้ตัวเลข x และคืนค่าส่วนที่เหลือเมื่อตัวเลข x หารด้วย 5

 def mod5(x): return x % 5

และเราต้องการใช้ฟังก์ชันข้างต้นเป็น key

ตอนนี้ เรียกใช้เซลล์รหัสต่อไปนี้

 nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]

ใช้เวลาสักครู่เพื่อแยกวิเคราะห์ผลลัพธ์

สังเกตว่าแทนที่จะจัดเรียงแบบปกติ ตอนนี้คุณกำลังปรับแต่งการเรียงลำดับตาม key ซึ่งก็คือ mod5

  • ตอนนี้จำนวนที่เหลือขั้นต่ำเมื่อหารด้วย 5 มาก่อน
  • และจำนวนที่ปล่อยให้เศษเหลือมากที่สุดเมื่อหารด้วย 5 เป็นองค์ประกอบสุดท้ายในรายการที่จัดเรียง

หากต้องการตรวจสอบกรณีนี้ ให้เรียกใช้ข้อมูลโค้ดต่อไปนี้

 nums = [25,13,6,17,9] for num in nums: print(f"{num} leaves remainder {num%5} when divided by 5") # Output 25 leaves remainder 0 when divided by 5 13 leaves remainder 3 when divided by 5 6 leaves remainder 1 when divided by 5 17 leaves remainder 2 when divided by 5 9 leaves remainder 4 when divided by 5

5 หาร 25 ได้พอดี และส่วนที่เหลือเป็น 0 นั่นคือองค์ประกอบแรกในรายการที่จัดเรียง 6 เหลือเศษ 1, มันจึงเป็นองค์ประกอบที่สอง, ไปเรื่อยๆ 9 จะเหลือเศษ 4 เมื่อหารด้วย 5 และเป็นองค์ประกอบสุดท้ายในรายการที่จัดเรียง

แทนที่จะกำหนดฟังก์ชันแยกต่างหาก คุณอาจใช้ฟังก์ชันแลมบ์ดาด้วย ใน Python แลมบ์ดาเป็นฟังก์ชันนิรนามแบบบรรทัดเดียว lambda args : expression คืนค่า นิพจน์ ที่คำนวณจาก args

ตอนนี้ มาเขียนการเรียงลำดับด้านบนใหม่โดยใช้นิพจน์แลมบ์ดาดังที่แสดงด้านล่าง

 nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]

จนถึงตอนนี้ คุณได้เรียนรู้วิธีจัดเรียงรายการตัวเลขแล้ว ต่อไป มาดูกันว่าคุณจะเรียงลำดับรายการสตริงใน Python ได้อย่างไร

วิธีจัดเรียงรายการ Python ตามลำดับตัวอักษร

ในส่วนนี้ คุณจะได้เรียนรู้การจัดเรียงรายการสตริง พร้อมตัวอย่างที่ได้รับแรงบันดาลใจจากแฮร์รี่ พอตเตอร์

python-sort-list

ในตัวอย่างของเรา students คือรายชื่อนักเรียนที่ฮอกวอตส์ และเราต้องการจัดเรียงตามลำดับตัวอักษรของชื่อพวกเขา

เมื่อเรียงลำดับรายการสตริง การเรียงลำดับเริ่มต้นจะอยู่ในลำดับตามตัวอักษร

 students = ["Harry","Ron","Hermione","Draco","Cedric"]

มาพิมพ์รายการที่เรียงลำดับเพื่อตรวจสอบผลลัพธ์ของการเรียงลำดับกัน

 students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

วิธีจัดเรียงรายการ Python ตามลำดับตัวอักษรย้อนกลับ

ในการเรียงลำดับรายการตามลำดับตัวอักษรย้อนกลับ ให้ตั้งค่า reverse = True ดังที่แสดงในข้อมูลโค้ดด้านล่าง

 students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

จากผลลัพธ์ คุณจะเห็นว่ารายการถูกจัดเรียงในลำดับที่กลับกันจริงๆ

วิธีใช้พารามิเตอร์คีย์ ปรับแต่ง Sort

ในส่วนนี้ มาปรับแต่งการจัดเรียงโดยใช้พารามิเตอร์ key ที่เป็นตัวเลือก

พิจารณารายการต่อไปนี้ houses .

 houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]

ที่นี่ houses เป็นรายการพจนานุกรม พจนานุกรมแต่ละชุดมีคู่คีย์-ค่าสองคู่ คู่แรกระบุชื่อนักเรียนและอีกคู่หนึ่งเป็นบ้านที่พวกเขาเป็นสมาชิก

ตอนนี้ เราต้องการจัดเรียงรายชื่อ บ้าน ตามลำดับตัวอักษรของบ้านที่ พวกเขาเป็นเจ้าของ

อย่างที่คุณอาจเดาได้ในตอนนี้ เราควรตั้งค่าพารามิเตอร์ key เป็นบ้านของนักเรียนแต่ละคน

ในการเรียกค้นบ้านของนักเรียนแต่ละคน คุณสามารถกำหนดฟังก์ชัน returnHouse() ดังที่แสดงด้านล่าง

 def returnHouse(student): return student['house']

ฟังก์ชันนี้จะคืนค่าบ้านของนักเรียนคนนั้น

ตอนนี้คุณสามารถเรียกใช้เมธอด sort() ในรายการบ้านได้ดังที่แสดง

 houses.sort(key=returnHouse)

ในผลลัพธ์ด้านล่าง สังเกตว่ารายการถูกจัดเรียงตามบ้าน ไม่ใช่ชื่อของนักเรียน นั่นเป็นเหตุผลที่เรามีกริฟฟินดอร์ ฮัฟเฟิลพัฟ และสลิธีริน เรียงตามตัวอักษร

 print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

ในการกำหนดพารามิเตอร์ key ตามนั้น คุณสามารถใช้ฟังก์ชันแลมบ์ดาได้เช่นกัน สำหรับทุกรายการ ฟังก์ชันนี้จะคืนค่าบ้านสำหรับรายการในรายการนั้น

เรียกใช้เซลล์รหัสต่อไปนี้เพื่อตรวจสอบสิ่งนี้

 houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

ในตัวอย่างทั้งหมด คุณได้ใช้เมธอด sort() ในรายการ และตอนนี้คุณก็รู้ว่ามันปรับเปลี่ยนรายการเดิม

จะทำอย่างไรถ้าคุณต้องการรักษารายการเดิมไว้แต่ได้รับสำเนาที่จัดเรียงของรายการ

ใน Python คุณสามารถใช้ฟังก์ชัน sorted() เพื่อทำสิ่งนี้

ไวยากรณ์ของ Python sorted() Function

ฟังก์ชัน sorted() ใช้ในรายการหรือคอลเลกชันใด ๆ เป็นอาร์กิวเมนต์ และส่งคืนสำเนาที่จัดเรียงของรายการ—และรายการต้นฉบับจะไม่ถูกแก้ไข

ไวยากรณ์สำหรับฟังก์ชัน sorted() ของ Python คือ:

 <sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

สังเกตว่าไวยากรณ์คล้ายกับวิธีการ sort() ที่เราเห็นก่อนหน้านี้อย่างไร

  • <list> เป็นอ็อบเจ็กต์รายการ Python ที่ถูกต้องและเป็นพารามิเตอร์ ที่จำเป็น
  • reverse และ key เป็นพารามิเตอร์ เสริม

หมายเหตุ : ฟังก์ชัน sorted() ต่างจากเมธอด sort() ที่ทำหน้าที่เฉพาะกับรายการเท่านั้น สามารถใช้ sorted sorted() เพื่อจัดเรียง Python iterable ใด ๆ ของ Python เช่น รายการ สตริง และพจนานุกรม

วิธีจัดเรียงรายการ Python โดยใช้ sorted () Function

#1. ในตัวอย่างนี้ nums คือรายการตัวเลข

คุณสามารถเรียกใช้ฟังก์ชัน sorted sorted() โดยมี nums เป็นอาร์กิวเมนต์ และกำหนดให้กับรายการ sorted_nums1

 nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25]

ในผลลัพธ์ด้านบน คุณจะเห็นว่ามีการจัดเรียง nums ตามลำดับจากน้อยไปมากตามค่าเริ่มต้น

นอกจากนี้ โปรดสังเกตว่า nums รายการดั้งเดิมจะไม่ถูกแก้ไข เนื่องจาก sorted() ส่งคืนรายการใหม่ สิ่งนี้ได้รับการยืนยันด้านล่าง

 print(nums) # Output: [25, 13, 6, 17, 9]

#2 . ตอนนี้ ตั้งค่าพารามิเตอร์ทางเลือก reverse เป็น True และรับ sorted_nums2

ดังที่แสดงในเซลล์โค้ดด้านล่าง sorted_nums2 เป็นรายการใหม่ที่มีรายการที่เรียงลำดับจากมากไปหาน้อย

 sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]

#3. ในตัวอย่างนี้ เรามาทำงานกับรายการสตริงกัน

เช่นเดียวกับตัวอย่างก่อนหน้านี้ การเรียกใช้ฟังก์ชัน sorted() จะคืนค่ารายการใหม่ และรายการจะเรียงลำดับตามตัวอักษร

 fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

#4. ตอนนี้ มาปรับแต่งการจัดเรียงโดยใช้พารามิเตอร์ key ที่เป็นตัวเลือก ตั้งค่า key เป็น len การดำเนินการนี้จะจัดเรียงรายการตามความยาวของสตริง

หมายเหตุ: ใน Python ฟังก์ชัน len() ในตัวจะใช้ iterable ใดๆ เช่น รายการ สตริง tuples และอื่นๆ และส่งคืนความยาวของ iterable

สตริงที่มีความยาวสั้นที่สุดจะปรากฏเป็นอันดับแรกในรายการที่จัดเรียง และสตริงที่ยาวที่สุดจะปรากฏที่ส่วนท้ายของรายการที่จัดเรียง

 fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

ในผลลัพธ์ข้างต้น ลูกแพร์ เป็นสตริงที่สั้นที่สุด และ สตรอเบอรี่ เป็นสตริงที่ยาวที่สุด

Python sort() วิธีการเทียบกับ sorted() Function

จนถึงตอนนี้ คุณได้เรียนรู้วิธีใช้เมธอด sort() และฟังก์ชัน sorted() แล้ว ในส่วนนี้ เรามาแจกแจงความแตกต่างระหว่างสองวิธีนี้กัน

Python .sort() วิธีการ Python sorted () ฟังก์ชั่น
จัดเรียงรายการให้เข้าที่—แก้ไขรายการเดิม ส่งกลับรายการที่เรียงลำดับใหม่
ใช้งานได้กับรายการ Python เท่านั้น ทำงานร่วมกับ Python iterables เช่น รายการ สตริง และคอลเล็กชันอื่นๆ
มีประเภทส่งคืนเป็น None ส่งคืนสำเนาที่จัดเรียงของ iterable

สรุป

ฉันหวังว่าคุณจะพบว่าบทช่วยสอนรายการ Python นี้มีประโยชน์

มาสรุปสิ่งที่เราได้กล่าวถึงอย่างรวดเร็ว

  • ใช้ list.sort(reverse = True | False, key = <func>) พร้อมตัวเลือกการ ย้อนกลับ และพารามิเตอร์ คีย์ เพื่อจัดเรียงรายการ
  • ใช้ sorted(list, reverse = True | False, key = <func>) เพื่อรับสำเนาที่จัดเรียงของรายการ

ตอนนี้ คุณได้เรียนรู้วิธีจัดเรียงรายการ Python แล้ว ให้เรียนรู้เกี่ยวกับความเข้าใจรายการใน Python หรือคุณสามารถเรียนรู้วิธีจัดการไฟล์หรือทำงานกับไฟล์ JSON ใน Python ได้เช่นกัน

คุณอาจลองใช้ตัวอย่างที่ให้ไว้ด้านบนใน Geekflare Online Python Compiler