แนะนำตัว
ข้อจำกัดพื้นฐานประการหนึ่งของการเปิดกล่องคือ คุณต้องทราบความยาวของลำดับที่คุณกำลังเปิดกล่องล่วงหน้า
ทำอย่างไร..
random_numbers =[0, 1, 5, 9, 17, 12, 7, 10, 3, 2]random_numbers_descending =sorted (random_numbers, reverse=True)print(f"Output \n*** {random_numbers_descending}" )
ผลลัพธ์
*** [17, 12, 10, 9, 7, 5, 3, 2, 1, 0]
หากตอนนี้ฉันต้องการค้นหาตัวเลขที่ใหญ่ที่สุดและใหญ่เป็นอันดับสองจากตัวเลข เราจะได้รับข้อยกเว้น "มีค่ามากเกินไปที่จะแกะ"
print(f"Output \n*** กำลังรับค่าที่ใหญ่ที่สุดและใหญ่เป็นอันดับสอง") ที่ใหญ่ที่สุด, วินาทีที่ใหญ่ที่สุด =random_numbers_descending
ผลลัพธ์
*** รับที่ใหญ่ที่สุดและใหญ่เป็นอันดับสอง
Python มักพึ่งพาการจัดทำดัชนีและการแบ่งส่วน ตัวอย่างเช่น เมื่อฉันต้องการแยกที่ใหญ่ที่สุด ใหญ่เป็นอันดับสองจากรายการด้านล่างคือวิธีที่เราสามารถทำได้
ที่ใหญ่ที่สุด =random_numbers_descending[0]print(f"Output \n*** กำลังรับค่าสูงสุด - {largest}")
ผลลัพธ์
*** รับสูงสุด - 17
second_largest =random_numbers_descending[1]print(f"Output \n*** กำลังรับค่าที่ใหญ่เป็นอันดับสอง - {second_largest}")
ผลลัพธ์
*** ได้อันดับที่ 2 - 12
rest_of_numbers =random_numbers_descending[2:]print(f"Output \n*** รับตัวเลขที่เหลือ - {rest_of_numbers}")
ผลลัพธ์
*** รับตัวเลขที่เหลือ - [10, 9, 7, 5, 3, 2, 1, 0]
ขณะนี้ใช้งานได้ การทำดัชนีและการแบ่งส่วนข้อมูลทั้งหมดมีสัญญาณรบกวนทางสายตา ในทางปฏิบัติ มักจะเกิดข้อผิดพลาดในการแบ่งสมาชิกของซีเควนซ์ออกเป็นเซตย่อยต่างๆ ด้วยวิธีนี้
เพื่อให้ทำงานได้ดีขึ้น Python รองรับการคลายแพ็กที่ดักจับทั้งหมดผ่านนิพจน์ที่ติดดาว
ไวยากรณ์ที่ติดดาวนี้อนุญาตให้ส่วนหนึ่งของการมอบหมายการคลายแพ็กได้รับค่าทั้งหมดที่ไม่ตรงกับส่วนอื่นๆ ของรูปแบบการคลายแพ็ก
largest,second_largest, *rest_of_numbers =random_numbers_descendingprint(f"Output \n big:{largest} \n second_largest:{second_largest} \n rest_of_numbers:{rest_of_numbers}")
ผลลัพธ์
ใหญ่สุด:17 วินาที_ใหญ่สุด:12rest_of_numbers:[10, 9, 7, 5, 3, 2, 1, 0]
รหัสด้านบนมีลักษณะอย่างไร ในบรรทัดเดียวซึ่งง่ายต่อการอ่านเราสามารถบรรลุผล นิพจน์ที่ติดดาวอาจปรากฏในตำแหน่งใดก็ได้ ดังนั้นคุณจึงสามารถใช้ประโยชน์จากการแตกไฟล์ catch-all ได้ทุกเมื่อที่คุณต้องการแยกชิ้นหนึ่ง
ใหญ่สุด:17rest_of_numbers:[12, 10, 9, 7, 5, 3, 2, 1]smallest:0
*rest_of_numbers, second_smallest, smallest =random_numbers_descendingprint(f"Output \n rest_of_numbers:{rest_of_numbers} \n second_smallest:{second_smallest} \n smallest:{smallest}")
rest_of_numbers:[17, 12, 10, 9, 7, 5, 3, 2]second_smallest:1smallest:0
อย่างไรก็ตาม ในการแกะงานที่มีนิพจน์ติดดาว คุณต้องมีส่วนที่จำเป็นอย่างน้อยหนึ่งส่วน มิฉะนั้น คุณจะได้รับ SyntaxError เราไม่สามารถใช้นิพจน์ catch-all ได้ด้วยตัวเอง
*rest_of_numbers =random_numbers_descending
ไฟล์ "" บรรทัดที่ 1*rest_of_numbers =random_numbers_descending^SyntaxError:เป้าหมายการมอบหมายที่ติดดาวต้องอยู่ในรายการหรือทูเพิล
เรายังไม่สามารถใช้นิพจน์ที่รับทั้งหมดหลายรายการในรูปแบบการแตกไฟล์ระดับเดียวได้ นี่เป็นอีกหนึ่งบันทึกสำคัญที่ต้องพิจารณา
*rest_of_numbers, *more_smallest, smallest =random_numbers_descending
ไฟล์ "" บรรทัดที่ 1*rest_of_numbers *more_smallest smallest =random_numbers_descending^SyntaxError:นิพจน์ที่ติดดาวสองรายการในงาน
แต่คุณสามารถใช้นิพจน์ที่ติดดาวหลายรายการในการแตกคำสั่งการมอบหมายงาน ตราบใดที่เป็นการรับทั้งหมดสำหรับส่วนต่างๆ ของโครงสร้างหลายระดับที่กำลังแตกไฟล์
player_grandslame_and_atptitles ={'Federer':(20, 103),'Nadal':(20,84),}((player1, (grandslam1, *atptitles1)), (player2, (grandslam2, *atptitles2))) =player_grandslame_and_atptitles.items()print(f'Output \nPlayer - {player1} บรรลุ {grandslam1} grandslams และ , {atptitles1} atp tour titles')print(f'Player - {player2} บรรลุ {grandslam2} grandslams แล้ว {atptitles2} ชื่อทัวร์ atp')
ผลลัพธ์
ผู้เล่น - เฟเดอเรอร์คว้าแกรนด์สแลม 20 ครั้งและ [103] ชื่อเอทีพีทัวร์ผู้เล่น - นาดาลบรรลุแกรนด์สแลม 20 ครั้งและ [84] ชื่อเอทีพีทัวร์
นิพจน์ที่ติดดาวจะกลายเป็นอินสแตนซ์ของรายการในทุกกรณี หากไม่มีรายการที่เหลือจากลำดับที่แตกออก ส่วนที่รับทั้งหมดจะเป็นรายการที่ว่างเปล่า สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณกำลังประมวลผลลำดับที่คุณทราบล่วงหน้าว่ามีองค์ประกอบอย่างน้อย N
random_numbers =[0, 1]ที่หนึ่ง, ที่สอง, *ส่วนที่เหลือ =random_numbersprint(f"Output \n{first, second, rest}")
ผลลัพธ์
(0, 1, [])