ใน Python ฉันพยายามเรียงลำดับวันที่ด้วยแลมบ์ดา ฉันไม่เข้าใจข้อความแสดงข้อผิดพลาด ข้อความคือ:
<lambda>() takes exactly 1 argument (2 given)
บรรทัดที่ฉันมีคือ
a = sorted(a, lambda x: x.modified, reverse=True)
ใน Python ฉันพยายามเรียงลำดับวันที่ด้วยแลมบ์ดา ฉันไม่เข้าใจข้อความแสดงข้อผิดพลาด ข้อความคือ:
<lambda>() takes exactly 1 argument (2 given)
บรรทัดที่ฉันมีคือ
a = sorted(a, lambda x: x.modified, reverse=True)
คำตอบ:
ใช้
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
บน Python 2.x sorted
ฟังก์ชันรับอาร์กิวเมนต์ตามลำดับนี้:
sorted(iterable, cmp=None, key=None, reverse=False)
ดังนั้นหากไม่มีkey=
ฟังก์ชั่นที่คุณส่งผ่านจะถูกพิจารณาว่าเป็นcmp
ฟังก์ชันที่ใช้เวลา 2 ข้อโต้แย้ง
lambda
พารามิเตอร์อื่นมาให้เนื่องจากcmp
ฟังก์ชั่นใช้เวลา 2?
cmp
ฟังก์ชั่นการเปรียบเทียบใช้เวลาสองข้อโต้แย้ง หากคุณไม่ได้ระบุว่าคุณกำลังผ่าน a key
มันจะสันนิษฐานได้จากลำดับพารามิเตอร์ฟังก์ชั่นที่คุณจะผ่านการเปรียบเทียบ แลมบ์ดาของคุณรับหนึ่งพารามิเตอร์ดังนั้นจึงไม่ใช่ตัวเปรียบเทียบที่ถูกต้องและนั่นคือสิ่งที่เกิดข้อผิดพลาด
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
มันจะพิมพ์ดังต่อไปนี้:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
รายการ Python มีสองวิธีในการเรียงลำดับข้อมูล:
sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable
ขึ้นอยู่กับความต้องการของคุณคุณสามารถเลือกระหว่างสองเหล่านี้:
ถ้าคุณต้องการเก็บรายการดั้งเดิมคุณสามารถใช้ฟังก์ชันเรียงลำดับหรือถ้าคุณไม่ต้องการรายการต้นฉบับคุณสามารถใช้ฟังก์ชันเรียงลำดับได้
ก่อนจะเรียงลำดับหรือเรียงลำดับเราต้องเข้าใจแลมบ์ดา
แลมบ์ดาเป็นฟังก์ชั่นนิรนามและฟังก์ชั่นนิรนามเป็นฟังก์ชั่นที่กำหนดโดยไม่มีชื่อโพสต์นี้ดูเหมือนจะอธิบายได้อย่างดี
https://www.programiz.com/python-programming/anonymous-function
ฟังก์ชั่นแลมบ์ดาเป็นสิ่งที่ดีสำหรับการโทรในบรรทัดเพราะมีเพียงนิพจน์เดียวที่ได้รับการประเมินและส่งคืน ไวยากรณ์สำหรับแลมบ์ดาคือ:
ข้อโต้แย้งแลมบ์ดา: การแสดงออก
มาดูวิธีการใช้ฟังก์ชั่นเรียงลำดับ:
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])
ผลลัพธ์: [('เดฟ', 'B', 10), ('เจน', 'B', 12), ('จอห์น', 'A', 15)]
ที่นี่เราสามารถดูรายการ student_tuples ที่มี tuples เรียงตามพารามิเตอร์ที่สำคัญที่นักเรียน [2]