Sorted Containers adalah pustaka koleksi terurut berlisensi Apache2, ditulis dalam Python murni, dan secepat ekstensi C.
Pustaka standar Python sangat bagus sampai Anda memerlukan tipe koleksi yang diurutkan. Banyak yang akan membuktikan bahwa Anda bisa melangkah jauh tanpa satu pun, tetapi saat Anda benar-benar membutuhkan daftar yang diurutkan, dict yang diurutkan, atau kumpulan yang diurutkan, Anda dihadapkan dengan selusin implementasi berbeda, sebagian besar menggunakan ekstensi C tanpa dokumentasi dan tolok ukur yang bagus.
Dengan Python, kita bisa melakukan lebih baik. Dan kita bisa melakukannya dengan Python murni!
> >> from sortedcontainers import SortedList
> >> sl = SortedList ([ 'e' , 'a' , 'c' , 'd' , 'b' ])
> >> sl
SortedList ([ 'a' , 'b' , 'c' , 'd' , 'e' ])
> >> sl *= 10_000_000
> >> sl . count ( 'c' )
10000000
> >> sl [ - 3 :]
[ 'e' , 'e' , 'e' ]
> >> from sortedcontainers import SortedDict
> >> sd = SortedDict ({ 'c' : - 3 , 'a' : 1 , 'b' : 2 })
> >> sd
SortedDict ({ 'a' : 1 , 'b' : 2 , 'c' : - 3 })
> >> sd . popitem ( index = - 1 )
( 'c' , - 3 )
> >> from sortedcontainers import SortedSet
> >> ss = SortedSet ( 'abracadabra' )
> >> ss
SortedSet ([ 'a' , 'b' , 'c' , 'd' , 'r' ])
> >> ss . bisect_left ( 'c' )
2
Semua operasi yang ditunjukkan di atas berjalan lebih cepat daripada waktu linier. Demo di atas juga membutuhkan hampir satu gigabyte memori untuk dijalankan. Ketika daftar yang diurutkan dikalikan dengan sepuluh juta, ia menyimpan sepuluh juta referensi untuk masing-masing "a" hingga "e". Setiap referensi memerlukan delapan byte dalam wadah yang diurutkan. Itu cukup sulit dikalahkan karena ini adalah biaya sebuah penunjuk ke setiap objek. Ini juga 66% lebih sedikit overhead daripada implementasi pohon biner pada umumnya (misalnya Red-Black Tree, AVL-Tree, AA-Tree, Splay-Tree, Treap, dll.) yang mana setiap node juga harus menyimpan dua pointer ke node anak.
Kontainer yang Diurutkan menghilangkan semua pekerjaan dari koleksi yang diurutkan dengan Python - membuat penerapan dan penggunaan Python Anda menjadi mudah. Tidak perlu menginstal kompiler C atau membuat dan mendistribusikan ekstensi khusus terlebih dahulu. Kinerja adalah sebuah fitur dan pengujian memiliki cakupan 100% dengan pengujian unit dan jam stres.
Alex Martelli , Rekan dari Python Software Foundation
"Bagus! ... Saya menyukai ide implementasi yang sederhana dan efektif dengan membagi kontainer yang diurutkan menjadi "fragmen" yang lebih kecil untuk menghindari biaya penyisipan O(N)."
Jeff Knupp , penulis Menulis Idiomatic Python dan Python Trainer
"Bagian terakhir, "secepat ekstensi C", sulit dipercaya. Saya memerlukan semacam Perbandingan Kinerja untuk meyakinkan bahwa ini benar. Penulis menyertakan ini dalam dokumen. Memang benar."
Kevin Samuel , Pelatih Python dan Django
Saya cukup kagum, bukan hanya dari kualitas kodenya (sangat mudah dibaca dan memiliki lebih banyak komentar daripada kode, wow), tetapi juga jumlah pekerjaan sebenarnya yang Anda lakukan pada hal-hal yang bukan kode: dokumentasi, benchmarking, penjelasan implementasi. Bahkan git lognya bersih dan pengujian unitnya habis pada Python 2 dan 3.
Mark Summerfield , permohonan singkat untuk Koleksi Diurutkan Python
Pustaka standar "termasuk baterai" Python tampaknya tidak memiliki baterai. Dan argumen bahwa “kita belum pernah memilikinya sebelumnya” sudah tidak berlaku lagi. Sudah saatnya Python menawarkan serangkaian kelas koleksi yang siap pakai, termasuk kelas yang diurutkan.
Sorted Containers digunakan dalam proyek sumber terbuka populer seperti: Zipline, perpustakaan perdagangan algoritmik dari Quantopian; Angr, platform analisis biner dari UC Santa Barbara; Trio, perpustakaan I/O asinkron; dan Dask Distributed, perpustakaan komputasi terdistribusi yang didukung oleh Continuum Analytics.
Memasang Sorted Containers mudah dilakukan dengan pip:
$ pip instal wadah yang diurutkan
Anda dapat mengakses dokumentasi di penerjemah dengan fungsi bantuan bawaan Python. Bantuan ini berfungsi pada modul, kelas, dan metode di Sorted Containers.
> >> import sortedcontainers
> >> help ( sortedcontainers )
> >> from sortedcontainers import SortedDict
> >> help ( SortedDict )
> >> help ( SortedDict . popitem )
Dokumentasi lengkap untuk Sorted Containers tersedia di http://www.grantjenks.com/docs/sortedcontainers/
Panduan pengguna memberikan pengenalan tentang Kontainer yang Diurutkan serta perbandingan dan analisis kinerja yang ekstensif.
Panduan komunitas memberikan informasi tentang pengembangan Sorted Container beserta dukungan, implementasi, dan detail sejarahnya.
Dokumentasi API memberikan informasi tentang fungsi, kelas, dan modul tertentu dalam paket Sorted Containers.
Hak Cipta 2014-2024 Hibah Jenks
Berlisensi di bawah Lisensi Apache, Versi 2.0 ("Lisensi"); Anda tidak boleh menggunakan file ini kecuali sesuai dengan Lisensi. Anda dapat memperoleh salinan Lisensi di
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diwajibkan oleh undang-undang yang berlaku atau disetujui secara tertulis, perangkat lunak yang didistribusikan berdasarkan Lisensi didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat Lisensi untuk bahasa tertentu yang mengatur izin dan batasan berdasarkan Lisensi.