مرتب کردن چند tuple در پایتون


#1

میخواستم یک لیست از چند tuple را بر اساس سن افراد هست مرتب کنم و اگر سن برابر بود بر اساس حروف الفبا نام افراد را مرتب کنم؟
هر tuple, مولفه اول اسم افراد مولفه دوم سن افراد.
ممنون میشم راهنمایی بفرمایید.
اگر هم متد یا روش دیگری هست ,بفرمایید.


#2

بنظر میا که بای به این روش عمل کنید، تست نکردم، یکمی هم پایتون یادم رفته

list = [(1, 10), (2, 5)]
list.sort(key=lambda tup: tup[1])
print(list)

یا از بزرگ به کوچک

list.sort(key=lambda tup: tup[1], reverse: True)

#3

این روش میتونه با روش های بهتر که list اصلی دست نخوره هم جایگزین بشه، کلا پیاتون تو این چیزا خیلی رو مخه. :face_with_symbols_over_mouth:


#4

روشی که به جواب رسیدم:
ابتدا بر حسب حروف الفبا مرتب کردم و بعد بر حسب سن مورد نظر مرتب کردم
که جواب داد.از سایتhttps://www.geeksforgeeks.org کمک گرفتم.


data.sort()

lst = len(data)
for i in range(0, lst):
    for j in range(0, lst-i-1):
        if (data[j][1] < data[j + 1][1]):
            temp = data[j]
            data[j] = data[j + 1]
            data[j + 1] = temp
							   					  



#5

این روش خیلی پایتونی نیست و خیلی هم سرعت مناسبی نداره، درضمن یک بار از sort استفاده شده بعدش از یک for تو در تو تا حدی هم نا خواناست، بهتره از روش مشابهی که دادم استفاده کنید،
میتونید چندتا پارامتر برای مرتب کردن به sort بدین


#6

@Rezamarzban :point_down::point_down::point_down:


#7

این روش تست کن

list = [(2,29),(8,30),(3,29),(5,30),(15,1),(7,30)]
list.sort(key=lambda tup:(tup[1],tup[0]))
print(list)

#8

سلام
به این صورت جواب گرفتم.


data.sort(key=lambda tup:(tup[0]))#sorted alphabetically 

data.sort(key=lambda tup:(tup[1]),reverse=True)#sorted in descending order

ممنون از toomaj و behnamgnu
واقعا لطف کردید.


#9

خیلی بهتر شد، اما هنوزم یک اشکال کوچیک داره و اونم اینه که ایندکس لیست اصلی mutate میشه به جای اینکه یک لیست جدید بوجود بیاد. میتونی کار مشابهی رو با sorted انجام بدی. با این حال چون اجزا لیست تغییری نمیکنه خیلی نباید سخت گرفت بخصوص اگر پرفرمنس مهمه، با sorted چیزی که بدست میاد اینه که index لیست قبلی قابل دسترسی هست اما سرعت با sort بالاتره.

new_data = sorted(key=lambda tup:(tup[0]))

یه نگاهی هم به لینک‌زیر بندازی بد نیست

http://www.code2succeed.com/difference-sorted-list-sort-method/


#10

متن بالا رو یکمی تغییر دادم