Hapus duplikat dari daftar dan urutkan menurut hitungan? (python 3)
Bagaimana cara menghapus semua duplikat dari daftar dan memesannya berdasarkan hitungan?
s = ["foo", "this", "lem", "foo", "lem"]
s = ["foo", "ebh", "wosv", "wosv", "ebh", "4whcu"]
#should return
>>> ["foo", "lem", "this"]
>>> ["ebh", "wosv", "foo", "4whcu"]
Aturan:
- Harus lebih pendek dari kode di bawah dalam hal ukuran byte.
- Urutan harus berdasarkan hitungan dalam urutan menurun.
- Jika ada dua senar dengan hitungan yang sama, maka kemunculan pertama lebih dulu
- Semua duplikat harus dihapus, hanya satu dari setiap string yang harus ada di daftar akhir
Saya saat ini punya
list({}.fromkeys(sorted(s,key=lambda y:-s.count(y))))
Saya telah memperhatikan jawaban seperti set
tetapi itu secara sewenang-wenang mengubah urutan, yang tidak saya inginkan.
Edit: Maaf untuk kualitas yang buruk sebelumnya. Saya telah mencambuk ini tepat sebelum saya tidur dan saya sangat lelah. Ini bukan untuk StackOverflow karena saya mencoba golf / mempersingkat ukuran kode ini sebanyak mungkin. Saya sudah mencoba mencari jawaban tetapi saya belum dapat menemukan apa pun.
Jawaban
44 byte
sorted({}.fromkeys(s),key=s.count,reverse=1)
Cobalah secara online!
Perbaikan di bawah ini, mengganti kunci dengan built-in daripada a lambda
, dan menggunakan reverse
untuk menukar perbandingan. Kami ingin melakukan [::-1]
pada hasil akhir sebagai gantinya, tetapi itu tidak melakukan tiebreak stabil yang benar.
47 byte
sorted({}.fromkeys(s),key=lambda y:-s.count(y))
Cobalah secara online!
Transposisi sederhana dari kode Anda, memindahkan {}.fromkeys
trik penghilangan duplikat sebelum penyortiran. Karena pengurutan diubah menjadi daftar, mengekstrak kunci dari kamus, list()
panggilan asli akan disimpan .
Untuk memudahkan referensi, kode aslinya adalah:
53 byte
list({}.fromkeys(sorted(s,key=lambda y:-s.count(y))))
Cobalah secara online!