Mengurutkan daftar Python berdasarkan panjang string
110
Saya ingin mengurutkan daftar string berdasarkan panjang string. Saya mencoba menggunakan sort sebagai berikut, tetapi sepertinya tidak memberikan hasil yang benar.
Saat Anda meneruskan lambdake sort, Anda harus mengembalikan integer, bukan boolean. Jadi kode Anda seharusnya terbaca sebagai berikut:
xs.sort(lambda x,y: cmp(len(x), len(y)))
Perhatikan bahwa cmp adalah fungsi bawaan yang cmp(x, y)mengembalikan -1 jika xkurang dari y, 0 jika xsama dengan y, dan 1 jika xlebih besar dari y.
Tentu saja, Anda dapat menggunakan keyparameter:
xs.sort(key=lambda s: len(s))
Ini memberi tahu sortmetode untuk memesan berdasarkan apa pun yang dikembalikan oleh fungsi kunci.
EDIT: Terima kasih kepada balpha dan Ruslan di bawah ini karena telah menunjukkan bahwa Anda bisa lenlangsung meneruskan sebagai parameter kunci ke fungsi, sehingga menghilangkan kebutuhan akan lambda:
xs.sort(key=len)
Dan seperti yang ditunjukkan Ruslan di bawah ini, Anda juga dapat menggunakan fungsi terurut bawaan daripada list.sortmetode, yang membuat daftar baru daripada menyortir yang sudah ada di tempat:
Ini akan mengurutkan dalam Ascending Order (Lebih kecil kata-kata di atas), untuk mengurutkan dalam Descending Order (Lebih kecil kata-kata di bawah) tambahkan parameter reverse = True
Ajay Gupta
The xs.sort()melempar "TypeError: sort () tidak membutuhkan argumen posisional". Sebaliknya seharusnyaxs.sort(key=lambda x: len(x))
Hi-Angel
84
Sama seperti jawaban Eli - hanya menggunakan bentuk yang lebih pendek, karena Anda dapat melewati satu lambdabagian di sini.
@ user2922935: Anda dapat melakukan xs [:: - 1] untuk membalikkan daftar yang sudah diurutkan. Lihat artikel Dan Bader di sini: dbader.org/blog/python-reverse-list
Thyag
7
xs.sort(key=len, reverse=True)
Raz
5
Saya ingin menambahkan cara kerja fungsi kunci pythonic saat menyortir:
Pola Desain Hiasi-Sortir-Undecorate:
Dukungan Python untuk fungsi kunci saat penyortiran diimplementasikan menggunakan apa yang dikenal sebagai pola desain decorate-sort-undecorate.
Ini berlangsung dalam 3 langkah:
Setiap elemen dari daftar untuk sementara diganti dengan versi "dihiasi" yang menyertakan hasil dari fungsi kunci yang diterapkan ke elemen tersebut.
Daftar ini diurutkan berdasarkan urutan alami tombol.
Elemen dekorasi diganti dengan elemen asli.
Parameter kunci untuk menentukan fungsi yang akan dipanggil pada setiap elemen daftar sebelum membuat perbandingan. docs
Tulis function lensort untuk mengurutkan daftar string berdasarkan panjangnya.
def lensort(a):
n = len(a)for i in range(n):for j in range(i+1,n):if len(a[i])> len(a[j]):
temp = a[i]
a[i]= a[j]
a[j]= temp
return a
print lensort(["hello","bye","good"])
def lensort(list_1):
list_2=[];list_3=[]for i in list_1:
list_2.append([i,len(i)])
list_2.sort(key =lambda x : x[1])for i in list_2:
list_3.append(i[0])return list_3
Saya dapat melakukannya menggunakan dua metode di bawah ini, menggunakan fungsi
def lensort(x):
list1 =[]for i in x:
list1.append([len(i),i])return sorted(list1)
lista =['a','bb','ccc','dddd']
a=lensort(lista)print([l[1]for l in a])
Dalam satu Liner menggunakan Lambda, seperti di bawah ini, sudah dijawab di atas.
lista =['a','bb','ccc','dddd']
lista.sort(key =lambda x:len(x))print(lista)
lambda
; cukup gunakankey = len
xs.sort()
melempar "TypeError: sort () tidak membutuhkan argumen posisional". Sebaliknya seharusnyaxs.sort(key=lambda x: len(x))
Sama seperti jawaban Eli - hanya menggunakan bentuk yang lebih pendek, karena Anda dapat melewati satu
lambda
bagian di sini.Membuat daftar baru:
Penyortiran di tempat:
sumber
xs.sort(key=len, reverse=True)
Saya ingin menambahkan cara kerja fungsi kunci pythonic saat menyortir:
Pola Desain Hiasi-Sortir-Undecorate:
Dukungan Python untuk fungsi kunci saat penyortiran diimplementasikan menggunakan apa yang dikenal sebagai pola desain decorate-sort-undecorate.
Ini berlangsung dalam 3 langkah:
Setiap elemen dari daftar untuk sementara diganti dengan versi "dihiasi" yang menyertakan hasil dari fungsi kunci yang diterapkan ke elemen tersebut.
Daftar ini diurutkan berdasarkan urutan alami tombol.
Elemen dekorasi diganti dengan elemen asli.
Parameter kunci untuk menentukan fungsi yang akan dipanggil pada setiap elemen daftar sebelum membuat perbandingan. docs
sumber
Cara termudah untuk melakukannya adalah:
sumber
Tulis function lensort untuk mengurutkan daftar string berdasarkan panjangnya.
sumber
Ini berhasil untuk saya!
sumber
Saya dapat melakukannya menggunakan dua metode di bawah ini, menggunakan fungsi
Dalam satu Liner menggunakan Lambda, seperti di bawah ini, sudah dijawab di atas.
sumber