@ bzupnick, gunakan key=lambda x:x[2].casefold(). Jika Python Anda tidak cukup baru, gunakan .lower()saja.casefold()
John La Rooy
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] Dengan daftar seperti ini dapat kita urutkan menggunakan itemgetter () sehubungan dengan elemen dalam x [0] [1]?
nidHi
Bisakah saya juga mendapatkan indeks semacam itu, jadi untuk mengurutkan daftar daftar terkait lainnya dalam urutan yang sama?
quarky
@quaryk Kedengarannya seperti pertanyaan yang menarik, tetapi tidak cocok untuk dijawab dalam komentar. Jika Anda tidak dapat menemukan pertanyaan yang membahasnya, Anda harus membuatnya.
John La Rooy
175
di tempat
>>> l =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]>>> l.sort(key=lambda x: x[2])
Bisakah Anda memberikan detail lebih lanjut tentang in placedan not in place?
qun
9
@ qun, "di tempat" berarti bahwa memori daftar lama digunakan kembali untuk yang diurutkan. "not in place" berarti bahwa daftar lama tetap tidak berubah dan daftar baru dibuat.
John La Rooy
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] Dengan daftar seperti ini adalah, bagaimana kita mengurutkan sehubungan dengan elemen dalam x [0] [1]?
nidHi
81
Itemgetter memungkinkan Anda untuk mengurutkan berdasarkan beberapa kriteria / kolom:
Saya pikir jawaban ini sangat penting. Saya pikir orang yang mencoba mengurutkan berdasarkan indeks array dalam akan jatuh di sini tetapi orang yang mencari untuk mengurutkan berdasarkan indeks array dalam BERGANDA akan mulai di sini dan jawaban Anda membantu saya melihat bahwa itemgetter benar-benar akan melakukannya untuk Anda!
ZekeDroid
11
beberapa kriteria juga dapat diimplementasikan melalui fungsi lambda
Saya pikir fungsi lambda dapat menyelesaikan masalah Anda.
old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])#Resulst of new_list will be:[[9,4,'afsd'],[0,1,'f'],[4,2,'t']]
**old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])**
koreksi saya jika saya salah tetapi bukankah 'x [2]' memanggil item ke-3 dalam daftar, bukan item ke-3 dalam daftar bersarang? haruskah x [2] [2]?
Tidak, karena key / lambda sudah mengulang item di daftar tingkat pertama. x adalah variabel lokal yang terikat pada setiap item secara bergantian.
DragonLord
1
Lebih mudah dipahami (Apa yang sebenarnya dilakukan Lambda):
ls2=[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]def thirdItem(ls):#return the third item of the listreturn ls[2]#Sort according to what the thirdItem function return
ls2.sort(key=thirdItem)
arr=[[2,1],[1,2],[3,5],[4,5],[3,1],[5,2],[3,8],[1,9],[1,3]]
arr.sort(key=lambda x:x[0])
la=set([i[0]for i inPoints])for i in la:
tempres=list()for j in arr:if j[0]==i:
tempres.append(j[1])for j in sorted(tempres,reverse=True):print(i,j)
Jawaban:
Ini adalah pekerjaan untuk itemgetter
Dimungkinkan juga untuk menggunakan fungsi lambda di sini, namun fungsi lambda lebih lambat dalam kasus sederhana ini
sumber
key=lambda x:x[2].casefold()
. Jika Python Anda tidak cukup baru, gunakan.lower()
saja.casefold()
di tempat
tidak pada tempatnya menggunakan yang diurutkan:
sumber
in place
dannot in place
?Itemgetter memungkinkan Anda untuk mengurutkan berdasarkan beberapa kriteria / kolom:
sumber
beberapa kriteria juga dapat diimplementasikan melalui fungsi lambda
sumber
Anda dapat dengan mudah mengurutkan menggunakan cuplikan ini, di mana 1 adalah indeks elemen.
sumber
Seperti ini:
sumber
Saya pikir fungsi lambda dapat menyelesaikan masalah Anda.
sumber
koreksi saya jika saya salah tetapi bukankah 'x [2]' memanggil item ke-3 dalam daftar, bukan item ke-3 dalam daftar bersarang? haruskah x [2] [2]?
sumber
Lebih mudah dipahami (Apa yang sebenarnya dilakukan Lambda):
sumber
Menyortir Array Multidimensi dijalankan di sini
sumber