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

>>> 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

>>> "  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 prefiksom 0x.

  • {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. %10d rezervira 10 znakova i desno poravnava broj.

  • precision – značenje ovisi o tipu. Za decimalne brojeve, broj znamenki nakon decimalne točke. %.2f daje dvije decimale. Za nizove, najveći broj znakova koji se uzima (%.5s skraćuje na pet).

  • Lijevo poravnanje – zastavica - stavlja polje na lijevu stranu. %-10d stavlja znamenke na lijevu stranu s pratećim razmacima.

  • Nadopuna nulama – zastavica 0 nadopunjuje vodećim nulama umjesto razmacima (za numeričke tipove). %05d nadopunjuje nulama na pet znamenki.

  • Predznak – zastavica + uvijek prikazuje predznak na brojevima, uključujući + za pozitivne.

  • Alternativni oblik – zastavica #. Za %x to prefiksira izlaz s 0x; za %o prefiksira 0o.

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.