Vodič za Pajton 2.6/Povratak nizova
A sada Vam predstavljamo kul trik koji možete da uradite sa nizovima:
def узвик(низ):
for карактер in низ:
print "Дај ми " + карактер
print "'" + карактер + "'"
узвик("Изгубити")
def средњи(низ):
print "Средњи карактер је:", низ[len(низ) / 2]
средњи("абвгдђ")
средњи("Пајтон програмски језик")
средњи("Атланта")
Izlaz je:
Дај ми И 'И' Дај ми з 'з' Дај ми г 'г' Дај ми у 'з' Дај ми б 'б' Дај ми и 'и' Дај ми т 'т' Дај ми и 'и' Средњи карактер је: д Средњи карактер је: р Средњи карактер је: а
Šta ovaj program pokazuje je da su nizovi slični listama na nekoliko načina. узвик()
funkcija pokazuje da se for
petlje mogu koristiti sa nizovima kao što se koriste sa listama. Procedura средњи
pokazuje da takav niz može takođe da se koristi kao len()
funkcija i indeksi nizova i delovi. Većina karakteristika listi radi na nizovima.
Sledeća osobina pokazuje neke specifične karakteristike nizova:
def на_горњи(низ):
## Пребацује низ у велика слова
велико_слово = ""
for карактер in низ:
if 'a' <= карактер <= 'z':
локација = ord(карактер) - ord('a')
нови = локација + ord('A')
карактер = chr(нови)
велико_слово = велико_слово + карактер
return велико_слово
print у_целико("ово је текст")
sa izlazom:
ОВО ЈЕ ТЕКСТ
Ovo radi zato što računar predstavlja znakove niza kao brojeve od 0 do 255. Paljjton ima funkciju zvanu ord()
(skraćeno za redno) koja vraća karakter kao broj. Tu je i odgovarajuća funkcija nazvana chr()
koja prevodi broj u karakter. Imajući to u vidu program bi trebalo da počne da bude jasniji. Prvi detalj je linija: if 'a' <= карактер <= 'z':
koja proverava da vidi da li je slovo malo. Ako jeste onda su sledeće linije korišćene. Prvo se konvertuje u svoje mesto a = 0, b = 1, c = 2 i tako danje sa linijom: локација = ord(карактер) - ord('a')
. Sledeće nova vrednost je pronađena sa нови = локација + ord('A')
. Ova vrednost se pretvara nazad u karakter koji je sada veliko slovo.
Sad zbog neke vežbe interaktivnog kucanja:
>>> # Цео број у низ >>> 2 2 >>> repr(2) '2' >>> -123 -123 >>> repr(-123) '-123' >>> `123` '123' >>> # Низ у цео број >>> "23" '23' >>> int("23") 23 >>> "23" * 2 '2323' >>> int("23") * 2 46 >>> # Разломак у низ >>> 1.23 1.23 >>> repr(1.23) '1.23' >>> # Разломак у цео број >>> 1.23 1.23 >>> int(1.23) 1 >>> int(-1.23) -1 >>> # Низ у разломак >>> float("1.23") 1.23 >>> "1.23" '1.23' >>> float("123") 123.0 >>> `float("1.23")` '1.23'
Ako do sad niste pogodili da funkcija repr()
može da prebaci ceo broj u niz i da funkcija int()
može da pretvori niz u ceo broj. Funkcija float()
može da prebaci niz u rezlomak. Funkcija repr()
vraća štampano predstavljanje nečega. `...`
pretvara skoro sve u niz, isto tako. Ovde su neki primeri toga:
>>> repr(1) '1' >>> repr(234.14) '234.14' >>> repr([4, 42, 10]) '[4, 42, 10]' >>> `[4, 42, 10]` '[4, 42, 10]'
Funkcija int()
pokušava da pretvori niz (ili razlomak) u ceo broj. Ovde je slična funkcija pod nazivom float()
koja će protvoriti ceo broj ili niz u razlomak. Druga funkcija koju Pajton ima je eval()
funkcija. Funkcija eval()
uzima niz i vraća podatak tipa koji pajton misli da je pronašao. Na primer:
>>> v = eval('123') >>> print v, type(v) 123 <type 'int'> >>> v = eval('645.123') >>> print v, type(v) 645.123 <type 'float'> >>> v = eval('[1, 2, 3]') >>> print v, type(v) [1, 2, 3] <type 'list'>
Ako koristite eval()
funkciju trebalo bi da proverite da će vratiti tip koji očekujete.
Jedna korisna funkcija nizova je split()
metoda. Ovde je primer:
>>> "Ово је гомила речи".split() ['Ово', 'је', 'гомила', 'речи'] >>> текст = "Прва група, друга група, трећа, четврта" >>> текст.split(",") ['Прва група', ' друга група', ' трећа', ' четврта']
Primetite kako split()
prebacuje niz u listu nizova. Niz je podeljen razmakom podrazumevano ili opcionim argumentom (u ovom slučaju zarezom).
Takođe možete da dodate još jedan argument koji govori split()
koliko puta će se separator koristi da podeli tekst. Na primer:
>>> листа = text.split(",") >>> len(листа) 4 >>> листа[-1] ' четврта' >>> листа = текст.split(",", 2) >>> len(листа) 3 >>> листа[-1] ' трећа, четврта'
Deljenje nizova (i listi)
[uredi]Nizovi se takođe mogu deliti — na isti način kao što smo pokazali za liste u prethodnom poglavlju — korišćenjem "operatora" odsecanja" [:]. Operator odsecanja radi na isti način kao ranije: tekst[prvi_indeks:poslednji_indeks] (u veoma retkim slučajevima može postojati još jedna kolona i treći argument, kao primeru prikazanom ispod).
Da ne bi zbunili sa indeksom brojeva, lalše je da ih vidite kao isečke, mogućnosti da isečete niz na delove. Ovde je primer, koji prikazuje isečke (u žutom delu) i brojeve njihovih indeksa (crveno i plavo) za jednostavan tekstualni niz:
0 | 1 | 2 | ... | -2 | -1 | ||||||||||
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | |||||||||
tekst = | " | S | T | R | I | N | G | " | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
↑ | ↑ | ||||||||||||||
[: | :] |
Imajte na umu da su crveni indeksi računati od početka niza i plavi od kraja niza, unazad. (Primetite da plavi nema indeks -0, što je izgleda logično na kraju niza. Zato što -0 == 0, (-0 znači "početak niza" takođe.) Sada smo spremni da koristimo indekse za operaciju odsecanja:
tekst[1:4] | → | "TRI" |
tekst[:5] | → | "STRIN" |
tekst[:-1] | → | "STRIN" |
tekst[-4:] | → | "RING" |
tekst[2] | → | "R" |
tekst[:] | → | "STRING" |
tekst[::-1] | → | "GNIRTS" |
tekst[1:4] nam daje sve nizove od tekst između isečaka 1 i 4, "TRI". Ako izostavite jedno od [prvi_indeks:poslednji_indeks] argumenata, dobijate početak ili kraj stringa kao podrazumevano: tekst[:5] daje "STRIN". Za oba prvi_indeks i poslednji_indeks možemo koristiti obe crvene i obe plave šeme brojeva: tekst[:-1] daje isto kao tekst[:5], zato što je indeks -1 na istom mestu kao 5 u ovom slučaju. Ako ne koristite argumente koji sadrže dve tačke, broj se drugačije tretira: tekst[2] daje nam jedan karakter praćen drugim isečkom, "R". Specijalna operacija za deljenje tekst[:] znači "od početka do kraja" i stvara kopiju celog niza(ili liste, kao što je prikazano u prethodnom poglavlju).
Krajnje ali ne manje važno, operacija odsecanja može imati druge dve tačke i treći argument, što se tumači kao "veličina koraka": tekst[::-1] je tekst od početka do kraja, sa veličinom koraka -1. -1 znači "svaki karakter, ali u drugom pravcu, opadajućem obliku". "STRING" otpozadi je "GNIRTS" (testirajte korak veličine 2, ako niste ovo shvatili).
Sve operacije odsecanja rade dobro i sa listama. U ovom smislu nizovi su samo poseban slučaj listi, gde su elementi liste pojedinačni karakteri. Samo zapamtite koncept isečaka, i indeksi za odsecanje će biti manje zbunjujući.
Primeri
[uredi]# Овај програм захтева одлично разумевање децималних бројева
def у_низ(у_инт):
"""Претвара цео број у низ"""
изл_низ = ""
префикс = ""
if у_инт < 0:
префикс = "-"
у_инт = -у_инт
while у_инт / 10 != 0:
изл_низ = chr(ord('0') + у_инт % 10) + изл_низ
у_инт = у_инт / 10
изл_низ = chr(ord('0') + у_инт % 10) + изл_низ
return префикс + изл_низ
def у_инт(у_низ):
"""Претвара низ у цео број"""
изл_бр = 0
if ул_низ[0] == "-":
множилац = -1
у_низ = у_низ[1:]
else:
множилац = 1
for x in range(0, len(у_низ)):
изл_бр = изл_бр * 10 + ord(у_низ[x]) - ord('0')
return изл_бр * множилац
print у_стр(2)
print у_стр(23445)
print у_стр(-23445)
print у_инт("14234")
print у_инт("12345")
print у_инт("-3512")
Izlaz je:
2 23445 -23445 14234 12345 -3512