de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
 skolima
skolima
Question

Kaip surūšiuoti eilučių sąrašą?

Koks geriausias būdas sukurti abėcėlės tvarka surūšiuotą sąrašą programoje "Python"?

395 2008-08-30T17:03:09+00:00 3
 martineau
martineau
Redaguotas klausimas popietr balandis 2017 в 7:27
Programavimas
sorting
python
string
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
Solution / Answer
Eli Courtwright
Eli Courtwright
popietr rugpjūtis 2008 в 5:10
2008-08-30T17:10:12+00:00
Daugiau
Šaltinis
Redaguoti
#8433485

Pagrindinis atsakymas:

mylist = ["b", "C", "A"]
mylist.sort()

Tai pakeičia jūsų pradinį sąrašą (t. y. rūšiuoja vietoje). Norėdami gauti surūšiuotą sąrašo kopiją, nekeisdami originalo, naudokite sorted() funkciją:

for x in sorted(mylist):
    print x

Tačiau pirmiau pateikti pavyzdžiai yra šiek tiek naivūs, nes juose neatsižvelgiama į vietinę kalbą ir rūšiuojama pagal didžiąsias raides. Galite pasinaudoti pasirenkamuoju parametru key ir nurodyti pasirinktinę rūšiavimo tvarką (alternatyva, naudojant cmp, yra pasenęs sprendimas, nes jį reikia vertinti kelis kartus - key apskaičiuojamas tik vieną kartą kiekvienam elementui).

Taigi, rūšiuoti pagal dabartinę vietinę kalbą, atsižvelgiant į kalbai būdingas taisykles (cmp_to_key yra pagalbinė funkcija iš functools):

sorted(mylist, key=cmp_to_key(locale.strcoll))

Ir galiausiai, jei reikia, rūšiavimui galite nurodyti custom locale:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
  key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']

Paskutinė pastaba: pamatysite rūšiavimo be didžiųjų raidžių pavyzdžių, kuriuose naudojamas lower() metodas - jie yra neteisingi, nes veikia tik ASCII simbolių poaibiui. Šie du metodai neteisingi bet kokiems ne angliškiems duomenims:

# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
 skolima
skolima
Redaguotas atsakymas popietr spalis 2011 в 1:24
496
0
 rix0rrr
rix0rrr
popietr rugpjūtis 2008 в 5:04
2008-08-30T17:04:40+00:00
Daugiau
Šaltinis
Redaguoti
#8433484
list.sort()

Tai tikrai taip paprasta :)

35
0
John Millikin
John Millikin
popietr rugpjūtis 2008 в 6:10
2008-08-30T18:10:45+00:00
Daugiau
Šaltinis
Redaguoti
#8433487

Tačiau kaip tai veikia konkrečios kalbos rūšiavimo taisykles? Ar ji atsižvelgia į vietinę kalbą?

Ne, list.sort() yra bendra rūšiavimo funkcija. Jei norite rūšiuoti pagal Unicode taisykles, turėsite apibrėžti pasirinktinę rūšiavimo rakto funkciją. Galite pabandyti naudoti pyuca modulį, bet nežinau, kiek jis išbaigtas.

10
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
Roxana Elizabeth CASTILLO Avalos
Registruota prieš 4 dienas
2
Hideo Nakagawa
Registruota prieš 5 dienas
3
Sergiy Tytarenko
Registruota prieš 6 dienas
4
shoxrux azadov
Registruota prieš 1 savaitę
5
Koreets Koreytsev
Registruota prieš 1 savaitę
BG
DE
EL
ES
FR
ID
IT
JA
KO
LT
NL
PT
RU
TR
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę