Saya punya daftar string seperti ini:
['Aden', 'abel']
Saya ingin menyortir item, tidak sensitif huruf besar / kecil. Jadi saya ingin mendapatkan:
['abel', 'Aden']
Tapi saya kebalikannya dengan sorted()
atau list.sort()
, karena huruf besar muncul sebelum huruf kecil.
Bagaimana saya bisa mengabaikan kasus ini? Saya telah melihat solusi yang melibatkan lebih rendah semua item daftar, tetapi saya tidak ingin mengubah kasus item daftar.
Jawaban:
Di Python 3.3+ ada
str.casefold
metode yang dirancang khusus untuk pencocokan tanpa casing:Dalam Python 2 gunakan
lower()
:Ini berfungsi untuk string normal dan unicode, karena keduanya memiliki
lower
metode.Dalam Python 2 ini berfungsi untuk campuran string normal dan unicode, karena nilai kedua tipe dapat dibandingkan satu sama lain. Namun, Python 3 tidak berfungsi seperti itu: Anda tidak dapat membandingkan string byte dan string unicode, jadi dalam Python 3 Anda harus melakukan hal yang waras dan hanya mengurutkan daftar satu jenis string.
sumber
str.lower
fungsi umum sebagaisorted(lst, key=str.lower)
atau (Python 2) menggunakanlower
metodestring
modul sebagaisorted(lst, key=string.lower)
. Satu juga dapat digunakanstr.lower
untuk string dalam Python 2, tetapi kemudian harus digunakanunicode.lower
untukunicode
objek, sedangkanstring.lower
menerima keduanya (yang, seperti yang Anda katakan, mungkin bukan benar-benar mode operasi "waras", meskipun).Dalam Python 3
str
adalah unicode tetapi dalam Python 2 Anda dapat menggunakan pendekatan yang lebih umum ini yang berfungsi untuk keduanyastr
danunicode
:sumber
[['Aden'], ['abel']]
sorted(x,key=lambda i:i[0].lower())
Anda juga dapat mencoba ini untuk mengurutkan daftar di tempat:
sumber
Ini berfungsi di Python 3 dan tidak melibatkan menurunkan hasil (!).
sumber
Di python3 Anda bisa menggunakan
sumber
Saya melakukannya dengan cara ini untuk Python 3.3:
Maka Anda bisa memanggil fungsi ini:
sumber
Jenis case-insensitive, menyortir string pada tempatnya , dengan Python 2 OR 3 (diuji dengan Python 2.7.17 dan Python 3.6.9):
Kuncinya adalah
key=str.lower
. Inilah yang terlihat dari perintah-perintah itu hanya dengan perintah, untuk memudahkan penyalinan sehingga Anda dapat mengujinya:Perhatikan bahwa jika string Anda adalah string unicode, (seperti
u'some string'
), maka hanya dalam Python 2 (BUKAN dalam Python 3 dalam kasus ini)x.sort(key=str.lower)
perintah di atas akan gagal dan menghasilkan kesalahan berikut:Jika Anda mendapatkan kesalahan ini, maka tingkatkan ke Python 3 di mana mereka menangani penyortiran unicode, atau mengonversi string unicode Anda menjadi string ASCII terlebih dahulu, menggunakan pemahaman daftar, seperti ini:
Referensi:
sumber
Coba ini
Keluaran
['abel', 'Aden']
sumber