Mai mult
Cum pot obține un subșir al unui șir în Python?
Există o modalitate de a subșir al unui șir în Python, pentru a obține un nou șir de la cel de-al treilea personaj la sfârșitul șirului?
Poate ca myString[2:end]
?
Dacă plecarea a doua parte înseamnă 'până la sfârșitul', și dacă pleci prima parte, începe de la început?
1976
11
Python solicită acest concept "feliere" și funcționează pe mai multe siruri de caractere. Avea o privire de aici pentru o introducere cuprinzătoare.
Doar pentru completitudine, ca nimeni altcineva nu a menționat acesta. Cel de-al treilea parametru pentru a o matrice felie este un pas. Deci inversează un șir de caractere este la fel de simplu ca:
Sau selectând caractere alternative ar fi:
Capacitatea de a păși înainte și înapoi prin șirul menține coerența cu posibilitatea de a felie matrice de la început sau de sfârșit.
Substr() în mod normal (de exemplu, PHP și Perl) funcționează în acest fel:
Deci parametrii sunt
început
și "LUNGIME".Dar Python's comportament este diferit; acesta așteaptă de la începutul și cea de după END (!). Acest lucru este greu de la fața locului de către începători. Deci varianta corectă pentru Substr(s, începutul, LUNGIME) este
Un mod comun de a realiza acest lucru este prin șir de feliere.
MyString[a:b]
vă oferă un subșir de index a - (b - 1).Un exemplu pare să fi dispărut aici: plin (de mică adâncime), copie.
Acesta este un idiom comun pentru a crea o copie de secvență tipuri (nu de internați siruri de caractere),
[:]
. Superficial exemplare o listă, a se vedea Python lista felie de sintaxă folosite pentru nici un motiv evident.Da, acest lucru chiar funcționează dacă atribuiți, sau lega, numele, "sfârșitul", la constanta singleton, "Nici unul":
Felie notație are 3 argumente importante:
Lor implicite atunci când nu sunt indicate ca "Nici unul" - dar putem să le treacă în mod explicit:
Da, de exemplu:
Rețineți că vom include începe în felie, dar mergem doar până la, și inclusiv, oprește-te.
Atunci când pas este "Nici unul", în mod implicit felie folosește " 1 " pentru pasul. Dacă faci un pas cu un număr întreg negativ, Python este suficient de inteligent pentru a merge de la sfârșit spre început.
Am explicat felie de notație în detaliu în răspunsul meu pentru a Explica felie notație Întrebare.
Te'am luat-o chiar acolo, in afara de "end". L's a numit felie de notație. Exemplul tău ar trebui să citească:
Dacă lăsați pe dinafară de-al doilea parametru este, implicit, sfârșitul șirului.
Aș dori să adaug două puncte de discuție:
'abcde'[2:None] == 'abcde'[2:] == 'cde'
Acest lucru este deosebit de util în funcții, în cazul în care puteți't oferi un spațiu gol ca un argument:
def subșir(s, start, end): """Elimina "start" personaje de la început și "sfârșitul" caractere de sfârșit de șir
s
.Exemple
idx = felie(2, Nici unul) 'abcde'[idx] == 'abcde'[2:] == 'cde'
Poate am ratat-o, dar nu puteam't găsi un răspuns complet la această pagină la întrebarea inițială(s), pentru variabilele nu sunt discutate aici. Așa că a trebuit să caut mai departe.
De când am'm nu este încă permis să comenteze, să-mi add concluzia mea aici. Am'm sigur nu am fost singurul interesat de ea atunci când accesați această pagină:
Dacă pleci prima parte, veți obține
Și dacă ai lăsat : în mijloc la fel de bine ai cea mai simplă subșir, care ar fi al 5-lea caracter (numeri incepand cu 0, deci's gol în acest caz):
Dacă myString conține un număr de cont care începe la offset 6 și are o lungime de 9, atunci puteți extrage numărul de cont în acest fel:
acct = myString[6:][:9]
.Dacă OP acceptă că, s-ar putea să doriți să încercați, într-un mod experimental,
Acesta funcționează - nici o eroare este ridicat, și nici implicit 'string padding' are loc.
Folosind hardcoded indici în sine poate fi un dezastru.
În scopul de a evita ca, Python oferă un built-in obiect
slice()
.Dacă vrem să știm câți bani mi-a mai rămas.
Soluție normală:
Folosind felii:
Folosind felie puteți câștiga lizibilitate.