จัดเรียงรายการที่แจกแจงตามค่า [ซ้ำกัน]

กฟผ:

list1 = [2,5,46,23,9,78]
list1 = list(enumerate(list1))

ตอนนี้ สมมติว่าฉันต้องการเรียงลำดับรายการนี้ตามดัชนี 1 นั่นคือตามรายการเดิม 1 กล่าวคือเรียงลำดับจากน้อยไปหามาก ฉันจะทำอย่างไร?

ฉันต้องการบางสิ่งที่สามารถให้ทั้งดัชนีและค่าแก่ฉันได้

list2 = sorted(list1[1], key=float)

person Euler_Salter    schedule 10.07.2017    source แหล่งที่มา
comment
หากเป็นตัวเลือก ให้ลองเรียงลำดับรายการก่อนที่จะแจกแจง: list(enumerate(sorted(list1))) เว้นแต่คุณตั้งใจที่จะคงการอ้างอิงถึงดัชนีดั้งเดิม ซึ่งในกรณีนี้จะใช้ไม่ได้ผล   -  person Joshua Detwiler    schedule 10.07.2017


คำตอบ (3)


จัดเรียงด้วย item[1] เป็นคีย์:

>>> list2 = sorted(list1, key=lambda x:x[1])
>>> list2
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
person Uriel    schedule 10.07.2017

อะไรแบบนี้เหรอ?

>>> from operator import itemgetter
>>> sorted(list1, key=itemgetter(1))
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]

ด้วยการจัดเตรียมฟังก์ชันหนึ่งอาร์กิวเมนต์ให้กับ key เรากำลังระบุการเปรียบเทียบ คีย์สำหรับองค์ประกอบรายการที่ใช้โดย sorted itemgetter เป็น wrapper ฟังก์ชันที่ดีรอบๆ ตัวดำเนินการ getter ของไอเท็ม [i]

person randomir    schedule 10.07.2017

คุณต้องส่งผ่านรายการทั้งหมด (ไม่ใช่แค่องค์ประกอบแรก) และใช้ฟังก์ชันแลมบ์ดาเพื่อเรียงลำดับค่า - x[1]

>>> list1 = [2,5,46,23,9,78]
>>> list2 = list(enumerate(list1))
>>> list2
[(0, 2), (1, 5), (2, 46), (3, 23), (4, 9), (5, 78)]
>>> list3 = sorted(list2, key=lambda x: x[1])
>>> list3
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
person Attie    schedule 10.07.2017