2.5. Metode nizova i oblikovanje¶
Nizovi dolaze s ugrađenim kompletom metoda za pregled i preoblikovanje. Budući da su nizovi nepromjenjivi, svaka metoda vraća novi niz – izvornik ostaje nepromijenjen.
2.5.1. Pregledavanje nizova¶
str.startswith()/str.endswith()– provjera prefiksa ili sufiksa; vraćabool.str.find()– pozicija prvog pojavljivanja podniza, ili-1ako ga nema.str.index()radi isto, ali bacaValueErrorkad ga nema.str.count()– broj nepreklapajućih pojavljivanja.ključna riječ
in–"MV" in namevraćaTrueako je podniz bilo gdje u nizu.
>>> name = "OpenMV Cam"
>>> name.startswith("Open")
True
>>> name.find("MV")
4
>>> name.count("m")
1
>>> "Cam" in name
True
2.5.2. Čišćenje i veličina slova¶
str.strip()– uklanja vodeće i završne razmaknike. Proslijedite niz znakova da uklonite prilagođeni skup (s.strip("/")).str.lower()/str.upper()– pretvorba veličine slova.str.replace()– zamjena podniza.
>>> " hello ".strip()
'hello'
>>> "abc-123".replace("-", "_")
'abc_123'
>>> "OpenMV".lower()
'openmv'
2.5.3. Dijeljenje i spajanje¶
str.split()– razbija niz u listu na svakom pojavljivanju razdjelnika (zadano: bilo koji niz razmaknika).str.join()– obrnuto: lijepi slijed nizova zajedno s primateljem kao razdjelnikom. Ovo je učinkovit način izgradnje dugog niza iz dijelova.
>>> "1,2,3".split(",")
['1', '2', '3']
>>> "hello world".split()
['hello', 'world']
>>> ", ".join(["a", "b", "c"])
'a, b, c'
2.5.4. f-stringovi¶
Najjednostavniji način umetanja vrijednosti u niz jest f-string – niz literal s prefiksom f. Svaki izraz unutar {} izračunava se i umeće:
>>> name = "OpenMV"
>>> count = 42
>>> f"{name} saw {count} blobs"
'OpenMV saw 42 blobs'
Dvotočka unutar vitičastih zagrada uvodi format spec koji upravlja načinom prikaza vrijednosti:
{x:.2f}– decimalni broj s 2 znamenke nakon decimalne točke.{x:>10}– desno poravnanje u polju širine 10 znakova.{x:<10}– lijevo poravnanje.{x:0>4}– nadopuna vodećim nulama do širine 4.{x:#x}– heksadecimalno s prefiksom0x.{x:b}– binarni prikaz.
>>> f"pi is roughly {3.14159:.3f}"
'pi is roughly 3.142'
>>> f"reg = {0xAB:#x}"
'reg = 0xab'
>>> for i in range(3):
... print(f"line {i:0>3}")
line 000
line 001
line 002
Jedan = nakon naziva izraza ispisuje i naziv i vrijednost – korisno za brze ispise za otklanjanje pogrešaka:
>>> v = 3.14
>>> print(f"{v=}")
v=3.14
2.5.4.1. Pretvorbe baze cijelih brojeva¶
Tri ugrađene funkcije rade isti posao kao format speci :b / :o / :x, ali izravno vraćaju pretvoreni niz:
bin()– baza 2, s prefiksom"0b".oct()– baza 8, s prefiksom"0o".hex()– baza 16, s prefiksom"0x".
>>> hex(255)
'0xff'
>>> bin(10)
'0b1010'
>>> oct(8)
'0o10'
Obrnuti smjer – pretvaranje niza baze N natrag u cijeli broj – koristi konstruktor int s eksplicitnom bazom:
>>> int("ff", 16)
255
>>> int("0b1010", 2) # the "0b" prefix is allowed
10
Posegnite za njima kad želite sirovi niz za cijeli broj (za redak zapisnika, konfiguracijsku datoteku, ispis registra). Posegnite za format specom kad želite nadopunu, širinu ili miješanje vrijednosti s drugim tekstom u istom f-stringu.
2.5.5. Stariji stilovi oblikovanja¶
f-stringovi su preporučeni stil, ali dva starija pristupa i dalje rade te se pojavljuju u postojećem kodu:
str.format() – vitičaste zagrade s pozicijskim ili imenovanim argumentima proslijeđenima metodi .format() na nizu predloška:
>>> "Hello, {}".format(name)
'Hello, OpenMV'
>>> "{0} + {0} = {1}".format(2, 4)
'2 + 2 = 4'
>>> "{name}: {value}".format(name="frames", value=42)
'frames: 42'
Format speci ({:.2f}, {:>10}, …) rade isto kao u f-stringovima; jedina je razlika gdje se vrijednost navodi.
% oblikovanje (printf-stil) – jedan operator % umeće vrijednosti u format kodove, jednu vrijednost po kodu. Proslijedite više vrijednosti kao n-torku:
>>> "Hello, %s" % name
'Hello, OpenMV'
>>> "%d + %d = %d" % (2, 2, 4)
'2 + 2 = 4'
>>> "%.2f" % 3.14159
'3.14'
Najčešći tipovni kodovi su %s (niz), %d (cijeli broj), %f (decimalni broj) i %x (heksadecimalno).
Svaki % kod može nositi modifikatore između % i slova tipa. Puni oblik je %[flags][width][.precision]type:
width – minimalan broj znakova koje polje mora zauzeti. Kraće vrijednosti nadopunjuju se razmacima; dulje se prelijevaju.
%10drezervira 10 znakova i desno poravnava broj.precision – značenje ovisi o tipu. Za decimalne brojeve, broj znamenki nakon decimalne točke.
%.2fdaje dvije decimale. Za nizove, najveći broj znakova koji se uzima (%.5sskraćuje na pet).Lijevo poravnanje – zastavica
-stavlja polje na lijevu stranu.%-10dstavlja znamenke na lijevu stranu s pratećim razmacima.Nadopuna nulama – zastavica
0nadopunjuje vodećim nulama umjesto razmacima (za numeričke tipove).%05dnadopunjuje nulama na pet znamenki.Predznak – zastavica
+uvijek prikazuje predznak na brojevima, uključujući+za pozitivne.Alternativni oblik – zastavica
#. Za%xto prefiksira izlaz s0x; za%oprefiksira0o.
Zastavice, širina i preciznost mogu se kombinirati:
>>> "%10d" % 42
' 42' # width 10, space-padded, right-aligned
>>> "%-10d|" % 42
'42 |' # width 10, left-aligned
>>> "%05d" % 42
'00042' # width 5, zero-padded
>>> "%8.2f" % 3.14159
' 3.14' # width 8, 2 decimal places
>>> "%08.2f" % 3.14159
'00003.14' # width 8, zero-padded
>>> "%+d" % 42
'+42' # explicit sign
>>> "%#06x" % 0xAB
'0x00ab' # 0x prefix, zero-pad to 6 chars total
Oba starija stila sporija su za čitanje i sklonija pogreškama od f-stringova – posegnite za f-stringovima u novom kodu, a starije oblike prepoznajte pri čitanju postojećeg koda.