Zoznam (pole/postupnosť)

Zoznam (pole/postupnosť)

je indexovaná a meniteľná  postupnosť hodnôt, prvá hodnota je pod indexom 0. Počet hodnôt v poli je obmedzena len veľkosťou operačnej pamäte.

deklarácia zoznamu:

 zoznam=[ ]

príklad:

p=[1,2,3,8,7,6,1,9]

Vytvorili sme zoznam s názvom p v ktorom je 8 hodnôt. Index (pozícia) prvej hodnoty je na 0 a poslednej je na 7

print(p[0]) – 1

print(p[7]) – 9

print(p[2]+p[6]) – 4

pridávanie prvkov na koniec zoznamu:

p.append(hodnota)

zistenie počtu hodnôt v poli:

len(p)

Pozor počet členov zoznamu sa nerovná indexu posledného člena ale počet hodnôt -1 = poslednému indexu.

Príklad:

Vytvorte n prvkový zoznam dvojciferných náhodných čísel – vytvoríme zoznam, kde počet prvkov (n) načítate od užívateľa a pomocou náhodných čísel random vygenerujete náhodné čísla 10 – 99 a pridáte ich do zoznamu

vytvorenie zoznamu:

import random

n=int(input(‘zadaj pocet prvkov zoznamu’))

z=[ ]

for i in range(n):

z.append(random.randint(10,99))

vypísanie zoznamu:

print(z)

vypísanie zoznamu pomocou pozícií (indexov) pozícia sa udáva v []:

for i in range(n):

print(z[i])

vypísanie zoznamu priamo po prvkoch:

for prvok in z:

print(prvok)

Ukážky programov:

Pole s DEF maximum

import random

def vytvor(n,t):
    for i in range(t):
        n.append(random.randrange(100))
    return(n)

def maximalny(n):
    najvac=pole[0]
    poz=0
    for i in range(1,len(pole)):
        if najvac<pole[i]:
            najvac=pole[i]
            poz=i
    return(najvac,poz)

p=int(input(‚zadaj pocet prvkov‘))
pole=[ ]
pole=vytvor(pole,p)

maxim=maximalny(pole)

print(pole)

print(maxim)

Pole, DEF, NSD

import random

def nsd(x,y):
    while x!=y:
        if x>y:
            x=x-y
        else:
            y=y-x
    return(x)

def napln(a,n):
    for i in range(n):
        a.append(random.randrange(100))
    return(a)

pole=[ ]
napln(pole,10)

print(pole)


hcc=nsd(pole[0],pole[1])

for i in range(2,len(pole)-1):
    hcc=nsd(hcc,pole[i])

print(hcc)

  • Vytvorte n-prvkovu množinu náhodných čísel
  • Zistite minimum a maximum
  • Zistite aritmetický priemer postupnosti
  • Zistite a pamätajte si párne čísla
  • Zistite či sa zadaný prvok nachádza v postupnosti a ak nie, nech o tom informuje užívateľa vhodným spôsobom
  • Zistite či sa prvok nachádza a vymeňte ho s novým prvkom načítaním od užívateľa
  • Zistite počet výskytov zadaného čísla, pamätajte si kde sa nachádzajú
  • Nahraďte všetky výskyty novou hodnotou
  • Nájdite najmenší a najväčší prvok a zistite ich rozdiel
  • Vypíšte prvky ktoré spĺňajú podmienky: väčšie, menšie ako; delitelné; prvočísla;
  • Zistite NSD celej postupnosti
  • Zistite všetky prvočísla postupnosti

Funkcie

  • funkcia len(postupnosť) -> vráti počet prvkov postupnosti
  • funkcia sum(postupnosť) -> vypočíta číselný súčet prvkov postupnosti
  • funkcia max(postupnosť) -> vráti maximálny prvok postupnosti (t.j. jeho hodnotu)
  • funkcia min(postupnosť) -> vráti minimálny prvok postupnosti

Metódy:

metóda count()

Volanie metódy: zoznam.count(hodnota)

vráti počet výskytov danej hodnoty v zozname. Táto metóda je immutable lebo nemení obsah zoznamu.

metóda index()

Volanie metódy: zoznam.index(hodnota)

vráti index prvého výskytu danej hodnoty v zozname. Táto metóda je immutable lebo nemení obsah zoznamu. Funkcia spadne na chybe, ak sa daná hodnota v zozname nenachádza.

metóda append()

Volanie metódy: zoznam.append(hodnota)

pridá na koniec zoznamu nový prvok – zoznam sa takto predĺži o 1. Táto metóda je mutable lebo mení obsah zoznamu.

metóda pop()

Volanie metódy: zoznam.pop()

odoberie z konca zoznamu posledný prvok – zoznam sa takto skráti o 1. Táto metóda je mutable lebo mení obsah zoznamu. Funkcia vracia hodnotu odobratého prvku. Ak bol zoznam prázdny, funkcia nič nevracia ale spadne na chybe.

metóda pop() s indexom

Volanie metódy: zoznam.pop(index)

doberie zo zoznamu príslušný prvok (daný indexom) – zoznam sa takto skráti o 1. Táto metóda je mutable lebo mení obsah zoznamu. Funkcia vracia hodnotu odobratého prvku. Ak bol zoznam prázdny, funkcia nič nevracia ale spadne na chybe.

metóda insert()

Volanie metódy: zoznam.insert(index, hodnota)

pridá na dané miesto zoznamu nový prvok – zoznam sa takto predĺži o 1. Táto metóda je mutable lebo mení obsah zoznamu. Funkcia nič nevracia, preto nemá zmysel priraďovať jej volanie do nejakej premennej (teda vracia hodnotu None).

metóda remove()

Volanie metódy: zoznam.remove(hodnota)

odoberie zo zoznamu prvý výskyt prvku s danou hodnotou – zoznam sa takto skráti o 1. Táto metóda je mutable lebo mení obsah zoznamu. Funkcia nič nevracia (teda vracia None). Ak sa daná hodnota v zozname nenachádza, funkcia spadne na chybe.

metóda sort()

Volanie metódy: zoznam.sort()

zmení poradie prvkov zoznamu tak, aby boli usporiadané vzostupne – zoznam takto nemení svoju dĺžku. Táto metóda je mutable lebo mení obsah zoznamu. Funkcia nič nevracia (teda vracia None). Ak sa prvky v zozname nedajú navzájom porovnávať (napríklad sú tam čísla aj reťazce), funkcia spadne na chybe.

metóda split()

Keďže je to reťazcová metóda, má tvar: reťazec.split()

Metóda rozbije daný reťazec na samostatné reťazce a uloží ich do zoznamu (teda vracia zoznam reťazcov). Predpokladáme, že tieto podreťazce sú navzájom oddelené „medzerovými“ znakmi (medzera, znak konca riadku, tabulátor). V helpe (napríklad help(“.split)) sa môžete dozvedieť ďalšie možnosti tejto funkcie.

metóda join()

Metóda zlepí všetky reťazce z daného zoznamu reťazcov do jedného, pričom ich navzájom oddelí uvedeným oddeľovačom, t. j. nejakým zadaným reťazcom. Ako zoznam môžeme uviesť ľubovoľnú postupnosť (iterovateľný objekt) reťazcov.

Opäť je to reťazcová metóda. Má tvar: oddeľovač.join(zoznam_reťazcov)

Verzia na stiahnutie:

Python – reťazce – str

ZDROJ: http://python.input.sk/

Zopár funkcií a metód pre prácu s reťazcami.

Reťazec je zoznam (pole) zložený zo znakov, to znamená je indexovaný od 0.

STRING

Už poznáme tieto štandardné funkcie:

  • len() – dĺžka reťazca
  • int(), float() – prevod reťazca na celé alebo desatinné číslo
  • bool() – prevod reťazca na True alebo False (ak je prázdny, výsledok bude False)
  • str() – prevod čísla (aj ľubovoľnej inej hodnoty) na reťazec
  • ord(), chr() – prevod do a z Unicode

Okrem nich existujú ešte aj tieto tri užitočné štandardné funkcie:

  • bin() – prevod celého čísla do reťazca, ktorý reprezentuje toto číslo v dvojkovej sústave
  • hex() prevod celého čísla do reťazca, ktorý reprezentuje toto číslo v šestnástkovej sústave
  • oct() – prevod celého čísla do reťazca, ktorý reprezentuje toto číslo v osmičkovej sústave

 

Metódy

  • reťazec.count(podreťazec) – zistí počet výskytov podreťazca v reťazci
  • reťazec.find(podreťazec) – zistí index prvého výskytu podreťazca v reťazci
  • reťazec.lower() – vráti reťazec, v ktorom prevedie všetky písmená na malé
  • retazec.upper() – vráti reťazec, v ktorom prevedie všetky písmená na veľké
  • reťazec.replace(podreťazec1, podreťazec2) – vráti reťazec, v ktorom nahradí všetky výskyty podreťazec1 iným reťazcom podreťazec2
  • reťazec.strip() – vráti reťazec, v ktorom odstráni medzery na začiatku a na konci reťazca (odfiltruje pritom aj iné oddeľovacie znaky ako ‚\n‘ a ‚\t‘)

s=’ahoj drahusik ako sa mas?‘

  • s.capitalize() – dá prvé písmeno v str. na veľké

‚Ahoj drahusik ako sa mas?‘

  • s.swapcase() – otočí malé na veľké a veľké na malé

‚AHOJ DRAHUSIK AKO SA MAS?

  • s.title() – každé písmeno na začiatku slova da veľké

‚Ahoj Drahusik Ako Sa Mas?‘

  •  m.replace(‚ ‚,“)-nahradí reťazec reťazcom

‚AhojDrahusikAkoSaMas?‘

Ukážky:

>>> s=’ahoj drahusik ako sa mas?‘

>>> s

‚ahoj drahusik ako sa mas?‘

>>> s.capitalize

<built-in method capitalize of str object at 0x031868A8> – bez ()

>>> s.capitalize()

‚Ahoj drahusik ako sa mas?‘

>>> s.swapcase()

‚AHOJ DRAHUSIK AKO SA MAS?‘

>>> s.title()

‚Ahoj Drahusik Ako Sa Mas?‘

>>> m=s.title()

>>> m

‚Ahoj Drahusik Ako Sa Mas?‘

>>> m.replace(‚ ‚,“)

‚AhojDrahusikAkoSaMas?‘

Článok pre stiahnutie / tlač. – STR_Retazce

Python: zoznam – hľadanie maxima, hľadanie prvku.

zoznam je indexovaná štruktúra, to znamená každý prvok má svoju pozíciu (adresu) kde sa nachádza, je to ako poradové číslo. Index začína na hodnote 0 tz. nie 1 ako by sa nám možno zdalo logickejšie

p=[9,5,7,8,6,14,78,2,98] – vytvorenie 9 členného zoznamu s názvom p
p[0] na nultej pozícii je číslo 9
p[5] na piatej pozícii je 14

Existuje funkcia max(), ktorá vráti najväčší prvok zoznamu, ale v algoritme si ukážeme ako nájsť maximum bez tejto funkcie.

Zistenie najväčšej hodnoty v zozname

Do pomocnej premennej najvac si dáme prvý člen zoznamu –p. Danú premennú najvac porovnávame s ďalšími členmi zoznamu p, ak nájdeme člena v zozname p väčšieho ako je najvac, tak do najvac vložíme nájdenú väčšiu hodnotu. Takto pokračujeme až do konca zoznamu.

import random #importujeme náhodné čísla
p=[] # vytvoríme prázdny zoznam prvkov s názvom p
n=int(input(‚zadaj pocet prvkov‘))
for i in range(n): # koľko sme si zvolili prvkov n , toľko krát budeme pridávať

p.append(random.randrange(100)) #do zoznamu náhodné číslo do veľkosti 100

print(p) # vypíšeme zoznam p
najvac=p[0] # vytvoríme si premennú do ktorej dáme prvý člen zoznamu
pn=0 #pozícia najväčšieho čísla

for i in range(1, len(p)): #prejdeme všetkými prvkami zoznamu

if najvac < p[i]: #každý prvok pola porovnáme s najvac a ak je väčší ako najvac

najvac=p[i] # do najvac dáme prvok zoznamu, ktorý je väčší ako najvac
pn=i # do pn dáme pozíciu, kde sme väčšie číslo ako najvac našli

print(‚najvacsia hodnota je {} na pozicii {}‘.format(najvac,pn))

 

Hľadanie prvku v zozname

Zadáme si kritérium hľadania, vytvoríme pomocnú premennú ktorú nastavíme mimo rozsah indexov zoznamu aktuálne na zápornú hodnotu.

Zadané kritérium budeme porovnávať so všetkými prvkami zoznamu, ak nájdeme zhodu s niektorým prvkom, odložíme si index pozície kde prišlo k zhode.

Daný algoritmus pokračuje ďalej a tak nájde vlastne výskyt poslednej zhody, nie prvej.

Ak nám stačí prvej zhody, cyklus prehľadávania ukončíme v mieste zhody.

Existuje metóda zoznamu – index() táto vráti hodnotu indexu prvého výskytu.

import random #importujeme náhodne čísla
p=[]# vytvoríme prázdny zoznam prvkov s názvom p
n=int(input(‚zadaj pocet prvkov‘))

for i in range(n): # koľko sme si zvolili prvkov n , toľko krát budeme pridávať

p.append(random.randrange(100)) #do zoznamu náhodné číslo do veľkosti 100

print(p)
hl=int(input(‚zadaj kriterium na hladanie – cislo‘))
phl=-1 #pozícia hľadaného na začiatok mimo rozsah

for i in range(len(p)):#prejdeme všetkými prvkami zoznamu

if hl == p[i]:# ak sa niektorý prvok v zozname p rovná hľadanému prvku hl- kritérium

phl=i # do phl odložím pozíciu kde sa našla zhoda s hľadaným prvkom

if phl >= 0: # ak je pozícia hľadaného väčšia alebo rovná 0, tak sa prvok našiel a v phl máme pozíciu kde sa nachádza hľadaný prvok

print(‚nachadza sa na pozicii {}‘.format(phl))

else:

print(‚nenachadza sa ‚)

 

Python: Cyklus While – NSD, Palindrom

Palindrom

Palindrom je reťazec, alebo číslo, ktoré je pri čítaní od začiatku aj od konca rovnaké.

Daný algoritmus otočí číslo a zistí, či sa aj po otočení rovná pôvodnému.

a=int(input(‚zadaj cislo‘))
pred=a # odložíme si pôvodné číslo
po=0 # počiatočná hodnota pre otočené číslo

while a != 0: # pokiaľ je číslo a iné ako 0

po=po*10+(a % 10) #otočené – po, násobíme 10 a pripočítame k nemu poslednú cifru čísla a
a=a//10 # poslednú cifru čísla odstránime z a

if pred == po : # ak sa číslo a rovná číslu po tak je to palindrom

print(‚cislo je palindrom‘)

else:

print(‚cislo nieje palindrom‘)

 

NSD – najväčší spoločný deliteľ dvoch čísel

Ak sa čísla nerovnajú, zistíme ktoré z nich je väčšie a od toho väčšieho odpočítame menšie. Opakujeme pokiaľ sa čísla nebudú rovnať

a=int(input(‚zadaj cislo 1‘))
b=int(input(‚zadaj cislo 2‘))

while a != b: #pokiaľ sa čísla a,b nerovnajú opakujeme

if a > b : # zisťujeme, ktoré z čísel je väčšie a od väčšieho odpočítame menšie

a = a – b

else:

b = b – a

print(‚najvacsi spolocny delitel je ‚,a)