PyLadies Brno

Seznamy

fibonacciho_cisla = [1, 1, 2, 3, 5, 8, 13]
for cislo in fibonacciho_cisla:
    print(cislo)

Vybírání ze seznamů

print(fibonacciho_cisla[2])
print(fibonacciho_cisla[2:-3])

Měnění seznamů

fibonacciho_cisla.append(21)

dalsi_prvosisla = [34, 55, 89]
fibonacciho_cisla.extend(dalsi_prvosisla)
fibonacciho_cisla[-1] = 0
fibonacciho_cisla[3:5] = [0, 0, 0, 0]

fibonacciho_cisla.pop()
del fibonacciho_cisla[-1]
del fibonacciho_cisla[3:5]

fibonacciho_cisla.remove(13)
seznam = [4, 7, 8, 3, 5, 2, 4, 8, 5]
seznam.sort()
print(seznam)

Operace se seznamy

melodie = ['C', 'E', 'G'] * 2 + ['E', 'E', 'D', 'E', 'F', 'D'] * 2 + ['E', 'D', 'C']

print(len(melodie))         # Délka seznamu
print(melodie.count('C'))   # Počet 'C' v seznamu
print('D' in melodie)       # Je 'D' v seznamu?
print(melodie.index('D'))   # Číslo prvního 'D'
print('DE' in melodie)          # Je 'DE' v seznamu?
print(['D', 'E'] in melodie)    # Je ['D', 'E'] v seznamu?
if seznam:
    print('V seznamu něco je!')
else:
    print('Seznam je prázdný!')

Tvoření seznamů

abeceda = list('abcdefghijklmnopqrstuvwxyz')
cisla = list(range(100))
mocniny_dvou = []
for cislo in range(10):
    mocniny_dvou.append(2 ** cislo)
print(mocniny_dvou)

Seznamy a řetězce

split a join
slova = 'Tato věta je složitá, rozdělme ji na slova!'.split()
print(slova)

zaznamy = '3A,8B,2X,9D'.split(',')
print(zaznamy)

veta = ' '.join(slova)
print(veta)
zamen_xo
def zamen_xo(retezec):
    vysledek = []
    for znak in retezec:
        if znak == 'o':
            vysledek.append('x')
        elif znak == 'x':
            vysledek.append('o')
        else:
            vysledek.append(znak)
    return ''.join(vysledek)

print(zamen_xo('---xo--xooxxox-'))

def tah_pocitace(pole, symbol):
    if symbol == 'x':
        return tah_pocitace_x(pole)
    else:
        return zamen_xo(tah_pocitace_x(zamen_xo(pole)))

Seznamy a náhoda

shuffle
import random

balicek = []
for barva in '♠', '♥', '♦', '♣':
    for hodnota in list(range(2, 11)) + ['J', 'K', 'Q', 'A']:
        balicek.append((str(hodnota) + barva))
random.shuffle(balicek)
print('\n'.join(balicek))
choice
import random
mozne_tahy = ['kámen', 'nůžky', 'papír']
tah_pocitace = random.choice(mozne_tahy)

Aliasy

a = [1, 2, 3]
b = a

b.append(4)

print(a)
def pridej_ctvertku(seznam):
    seznam.append(4)

a = [1, 2, 3]
b = a

pridej_ctvertku(b)

print(a)

N-tice

osoby = 'máma', 'teta', 'babička'
for osoba in trojice:
    print(''.format{osoba})
seznam_dvojic = []
for i in range(10):
    seznam_dvojic.append((i, i**2))
print(seznam_dvojic)
def podil_a_zbytek(a, b):
    return a // b, a % b

podil, zbytek = podil_a_zbytek(12, 5)
zip
osoby = 'máma', 'teta', 'babička'
vlastnosti = 'hodná', 'milá', 'laskavá'
for osoba, vlastnost in zip(osoby, vlastnosti):
    print('{} je {}'.format(osoba, vlastnost))
enumerate
prvocisla = [1, 1, 2, 3, 5, 8, 13]

for i, prvocislo in enumerate(prvocisla):
    print('Pvočíslo č.{} je {}'.format(i, prvocislo))

Kdy použít seznam, a kdy n-tici?

Seznamy se používají, když předem nevíme, kolik v nich přesně bude hodnot, nebo když je hodnot mnoho. Například seznam slov ve větě, seznam účastníků soutěže, seznam tahů ve hře, nebo seznam karet v balíčku. Oproti tomu for pozdrav in 'Ahoj', 'Hello', 'Hola', 'Hei', 'SYN': používá n-tici.
Seznamy se taky používají, když v nich jsou všechny hodnoty stejného druhu. Například seznam použijeme na písmena abecedy, ale dvojice index–hodnota z enumerate je n-tice.
Seznamy i n-tice mají i technické limity: n-tice nejdou měnit, a až se naučíme pracovat se slovníky, zjistíme že seznamy tam nepůjdou použít jako klíče.

Vnořené seznamy

def vytvor_tabulku(velikost=11):
    seznam_seznamu = []
    for a in range(velikost):
        seznam_cisel = []
        for b in range(velikost):
            seznam_cisel.append(a * b)
        seznam_seznamu.append(seznam_cisel)
    return seznam_seznamu

nasobilka = vytvor_tabulku()

for radek in nasobilka:
    for cislo in radek:
        print(cislo, end=' ')
    print()

print(nasobilka[3][4])
nasobilka[9][7] = 8

Hra