The dokumentasi tidak menjamin bahwa. Apakah ada tempat lain yang didokumentasikan?
Saya menduga ini mungkin stabil karena metode sortir pada daftar dijamin stabil (Catatan poin ke-9: "Dimulai dengan Python 2.3, metode sort () dijamin stabil"), dan sortir secara fungsional serupa. Namun, saya tidak dapat menemukan sumber pasti yang menyatakan demikian.
Tujuan: Saya perlu mengurutkan berdasarkan kunci utama dan juga kunci sekunder dalam kasus di mana kunci utama sama di kedua catatan. Jika sort () dijamin stabil, saya dapat mengurutkan pada kunci sekunder, kemudian mengurutkan pada kunci primer dan mendapatkan hasil yang saya butuhkan.
PS: Untuk menghindari kebingungan, saya menggunakan stable dalam arti "sejenis stabil jika menjamin tidak mengubah urutan relatif elemen yang membandingkan sama".
sumber
sorted([(1, 2), (1, 1)])
mengembalikan[(1, 1), (1, 2)]
alih-alih mengembalikan masukan asli dalam urutan / urutan yang sama. Bukankah jaminan stabilitas berarti harus mengembalikan[(1, 2), (1, 1)]
input asli ? Dalam hal ini, Anda harus eksplisit dan mengatakansorted([(1, 2), (1, 1)], key=lambda t: t[0])
key
parameter secara eksplisit.Mereka stabil .
Ngomong-ngomong: Anda terkadang bisa mengabaikan mengetahui apakah sortir dan sortir stabil, dengan menggabungkan pengurutan multi-pass dalam satu pass tunggal.
Misalnya, jika Anda ingin semacam benda berdasarkan mereka
last_name
,first_name
atribut, Anda dapat melakukannya dalam satu lulus:memanfaatkan perbandingan tupel.
Jawaban ini, sebagaimana adanya, mencakup pertanyaan awal. Untuk pertanyaan terkait penyortiran lebih lanjut, ada Python Sorting How-To .
sumber
key= lambda item: (-item.rating, item.price)
atau berikan a,cmp
bukankey
argumen. Saya masih tidak yakin tentang tujuan komentar Anda.Sementara itu, dokumentasi berubah ( komit relevan ) dan dokumentasi terkini
sorted
secara eksplisit menjaminnya:Bagian dari dokumentasi ini telah ditambahkan ke Python 2.7 dan Python 3.4 (+) sehingga setiap implementasi yang sesuai dari versi bahasa tersebut harus memiliki stabil
sorted
.Perhatikan bahwa untuk CPython
list.sort
telah stabil sejak Python 2.3Saya tidak 100% yakin
sorted
, saat ini penggunaannya sederhanalist.sort
, tetapi saya belum memeriksa riwayatnya. Tapi kemungkinan itu "selalu" digunakanlist.sort
.sumber
Dokumen "What's New" untuk Python 2.4 secara efektif membuat titik yang diurutkan () pertama-tama membuat daftar, kemudian memanggil sort () di atasnya, memberi Anda jaminan yang Anda perlukan meskipun tidak dalam dokumen "resmi". Anda juga dapat memeriksa sumbernya, jika Anda benar-benar khawatir.
sumber
Dokumen Python 3.6 tentang pengurutan sekarang menyatakan bahwa
Selanjutnya, di dalam dokumen tersebut, terdapat link ke Timsort stable , yang menyatakan bahwa
sumber