05.1 Listy a tablice

>>> x = [2, "dwa", [1, 2, 3]]
>>> len(x)
3

05.2 Indeksy list

>>> x = ["pierwszy", "drugi", "trzeci", "czwarty"]
>>> x[0]
'pierwszy'
>>> x[2]
'trzeci'


>>> a = x[–1]
>>> a
'czwarty'
>>> a = x[–2]
>>> a


>>> x = ["pierwszy", "drugi", "trzeci", "czwarty"]
>>> x[1:–1]
['drugi', 'trzeci']
>>> x[0:3]
['pierwszy', 'drugi', 'trzeci']
>>> x[–2:–1]
['trzeci']


>>> x[-1:2]
[]


>>> x[:3]
['pierwszy', 'drugi', 'trzeci']
>>> x[2:]
['trzeci', 'czwarty']


>>> y = x[:]
>>> y[0] = "1."
>>> y
['1.', 'drugi', 'trzeci', 'czwarty']
>>> x
['pierwszy', 'drugi', 'trzeci', 'czwarty']

05.3 Modyfikowanie list

>>> x = [1, 2, 3, 4]
>>> x[1] = "dwa"
>>> x
[1, 'dwa', 3, 4]


>>> x = [1, 2, 3, 4]
>>> x[len(x):] = [5, 6, 7]                #A
>>> x
[1, 2, 3, 4, 5, 6, 7]
>>> x[:0] = [-1, 0]                       #B
>>> x
[-1, 0, 1, 2, 3, 4, 5, 6, 7]
>>> x[1:-1] = []                          #C 
>>> x
[-1, 7]


>>> x = [1, 2, 3]
>>> x.append("cztery")
>>> x
[1, 2, 3, 'cztery']


>>> x = [1, 2, 3, 4]
>>> y = [5, 6, 7]
>>> x.append(y)  
>>> x
[1, 2, 3, 4, [5, 6, 7]]


>>> x = [1, 2, 3, 4]
>>> y = [5, 6, 7]
>>> x.extend(y)  
>>> x
[1, 2, 3, 4, 5, 6, 7]  


>>> x = [1, 2, 3]
>>> x.insert(2, "witaj")
>>> print(x)
[1, 2, 'witaj', 3]
>>> x.insert(0, "start")
>>> print(x)
['start', 1, 2, 'witaj', 3]


>>> x = [1, 2, 3]
>>> x.insert(—1, "witaj")
>>> print(x)
[1, 2, 'witaj', 3]


>>> x = ['a', 2, 'c', 7, 9, 11]
>>> del x[1]
>>> x
['a', 'c', 7, 9, 11]
>>> del x[:2]
>>> x
[7, 9, 11]


>>> x = [1, 2, 3, 4, 3, 5]
>>> x.remove(3)
>>> x
[1, 2, 4, 3, 5]
>>> x.remove(3)
>>> x
[1, 2, 4, 5]
>>> x.remove(3)
Traceback (innermost last):
 File "<stdin>", line 1, in ?
ValueError: list.remove(x): x not in list


>>> x = [1, 3, 5, 6, 7]
>>> x.reverse()
>>> x
[7, 6, 5, 3, 1]

05.4 Sortowanie list

>>> x = [3, 8, 4, 0, 2, 1]
>>> x.sort()
>>> x
[0, 1, 2, 3, 4, 8]


>>> x = [2, 4, 1, 3]
>>> y = x[:]
>>> y.sort()
>>> y
[1, 2, 3, 4]
>>> x
[2, 4, 1, 3]


>>> x = ["życie", "jest", "cudowne"]
>>> x.sort()
>>> x
['cudowne', 'jest', 'życie']


>>> x = [1, 2, 'witaj', 3]
>>> x.sort()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'


>>> x = [[3, 5], [2, 9], [2, 3], [4, 1], [3, 2]]
>>> x.sort()
>>> x
[[2, 3], [2, 9], [3, 2], [3, 5], [4, 1]]


>>> x = [[3, 5], [2, 9], [2, 3], [4, 1], [3, 2]]
>>> x.sort()
>>> x
[[2, 3], [2, 9], [3, 2], [3, 5], [4, 1]]

05.4.1 Własne mechanizmy sortowania

>>> def porownaj_liczbe_znakow((wyraz1):
...     return len(wyraz1)

>>> def porownaj_liczbe_znakow((wyraz1):
...     return len(wyraz1)
...
>>> lista_wyrazow = ["Python", "jest", "lepszy", "od", "C"]
>>> lista_wyrazow.sort()
>>> print(lista_wyrazow)
['C', 'Python', 'jest', 'lepszy', 'od']
>>> lista_wyrazow = ["Python", "jest", "lepszy", "od", "C"]
>>> lista_wyrazow.sort(key=porownaj_liczbe_znakow()
>>> print(lista_wyrazow)
['C', 'od', 'jest', 'Python', 'lepszy']

05.4.2 Funkcja sorted

>>> x = [4, 3, 1, 2]
>>> y = sorted(x)
>>> y
[1, 2, 3, 4]
>>> z = sorted(x, reverse=True)
>>> z
[4, 3, 2, 1]

05.5.1 Przynależność do zbioru i operator in

>>> 3 in [1, 3, 4, 5]
True
>>> 3 not in [1, 3, 4, 5]
False
>>> 3 in ["jeden", "dwa", "trzy"]
False
>>> 3 not in ["jeden", "dwa", "trzy"]
True

05.5.2 Konkatenacja list i operator +

>>> z = [1, 2, 3] + [4, 5]
>>> z
[1, 2, 3, 4, 5]

05.5.3 Inicjalizacja listy i operator *

>>> z = [None] * 4
>>> z
[None, None, None, None]

>>> z = [3, 1] * 2
>>> z
[3, 1, 3, 1]

05.5.4 Maksymalna i minimalna wartość elementu oraz funkcje max i min

>>> min([3, 7, 0, –2, 11])
—2
>>> max([4, "Witaj", [1, 2]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'

05.5.5 Przeszukiwanie listy i metoda index

>>> x = [1, 2, "pięć", 7, –2]
>>> x.index(7)
3
>>> x.index(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 5 is not in list

05.5.6 Wystąpienia elementu i metoda count

>>> x = [1, 2, 2, 3, 5, 2, 5]
>>> x.count(2)
3
>>> x.count(5)
2
>>> x.count(4)
0

05.6 Listy zagnieżdżone i kopie głębokie

>>> m = [[0, 1, 2], [10, 11, 12], [20, 21, 22]]
>>> m[0]
[0, 1, 2]
>>> m[0][1]
1
>>> m[2]
[20, 21, 22]
>>> m[2][2]
22

>>> zagnieżdżona = [0]
>>> oryginalna = [zagnieżdżona, 1]
>>> oryginalna
[[0], 1


>>> zagnieżdżona[0] = 'zero'
>>> oryginalna
[['zero'], 1]
>>> oryginalna[0][0] = 0
>>> zagnieżdżona
[0]
>>> oryginalna
[[0], 1]


>>> zagnieżdżona = [2]
>>> oryginalna
[[0], 1]


>>> oryginalna = [[0], 1]
>>> płytka = oryginalna[:]
>>> import copy
>>> głęboka = copy.deepcopy(oryginalna)


>>> płytka[1] = 2
>>> płytka
[[0], 2]
>>> oryginalna
[[0], 1]
>>> płytka[0][0] = 'zero'
>>> oryginalna
[['zero'], 1]


>>> głęboka[0][0] = 5
>>> głęboka
[[5], 1]
>>> oryginalna
[['zero'], 1]

05.7.1 Podstawy krotek

>>> x = ('a', 'b', 'c')   

>>> x[2]
'c'
>>> x[1:]
('b', 'c')
>>> len(x)
3
>>> max(x)
'c'
>>> min(x)
'a'
>>> 5 in x
False
>>> 5 not in x
True


>>> x[2] = 'd'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment


>>> x + x
('a', 'b', 'c', 'a', 'b', 'c')
>>> 2 * x
('a', 'b', 'c', 'a', 'b', 'c')


>>> x[:]
('a', 'b', 'c')
>>> x * 1
('a', 'b', 'c')
>>> x + ()
('a', 'b', 'c')

05.7.2 One-element tuples

>>> x = 3
>>> y = 4
>>> (x + y)   # Ta linia dodaje x do y
7
>>> (x + y,)  # Dodanie przecinka wskazuje, że nawiasy okrągłe oznaczają krotkę
(7,)
>>> ()        # By stworzyć pustą krotkę, używamy pustej pary nawiasów kwadratowych
()

05.7.3 Pakowanie i rozpakowywanie krotek

>>> (jeden, dwa, trzy, cztery) = (1, 2, 3, 4)
>>> jeden
1
>>> dwa
2

>>> jeden, dwa, trzy, cztery = 1, 2, 3, 4

>>> x = (1, 2, 3, 4)
>>> a, b, *c = x
>>> a, b, c
(1, 2, [3, 4])
>>> a, *b, c = x
>>> a, b, c
(1, [2, 3], 4)
>>> *a, b, c = x
>>> a, b, c
([1, 2], 3, 4)
>>> a, b, c, d, *e = x
>>> a, b, c, d, e
(1, 2, 3, 4, [])


>>> [a, b] = [1, 2]
>>> [c, d] = 3, 4
>>> [e, f] = (5, 6)
>>> (g, h) = 7, 8
>>> i, j = [9, 10]
>>> k, l = (11, 12)
>>> a
1
>>> [b, c, d]
[2, 3, 4]
>>> (e, f, g)
(5, 6, 7)
>>> h, i, j, k, l
(8, 9, 10, 11, 12)

05.7.4 Konwertowanie pomiędzy listami i krotkami

>>> list((1, 2, 3, 4))
[1, 2, 3, 4]
>>> tuple([1, 2, 3, 4])
(1, 2, 3, 4)


>>> list("Witaj")
['W', 'i', 't', 'a', 'j']

05.8.1 Działania na zbiorach

>>> x = set([1, 2, 3, 1, 3, 5])     #1
>>> x
{1, 2, 3, 5}                       #2
>>> x.add(6)     #3 
>>> x
{1, 2, 3, 5, 6}    #2
>>> x.remove(5)               #4
>>> x
{1, 2, 3, 6}   #2
>>> 1 in x       #5
True
>>> 4 in x                     #5
False
>>> y = set([1, 7, 8, 9])
>>> x | y                 #6
{1, 2, 3, 6, 7, 8, 9}
>>> x & y                  #7
{1}
>>> x ^ y              #8
{2, 3, 6, 7, 8, 9}

05.8.2 Frozenset

>>> x = set([1, 2, 3, 1, 3, 5]) 
>>> z = frozenset(x)
>>> z
frozenset({1, 2, 3, 5})
>>> z.add(6)
Traceback (most recent call last):
  File "<pyshell#79>", line 1, in <module>
    z.add(6)
AttributeError: 'frozenset' object has no attribute 'add'
>>> x.add(z)
>>> x
{1, 2, 3, 5, frozenset({1, 2, 3, 5})}

