# Inicializace pole a = [0] * 5 # Jak správně zkopírovat pole? b = a c = a[:] d = list(a) a[3] = 3 b[0] = -5 c[4] = 4
# Inicializace 2D pole přímo a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # Inicializace po řádcích f = [] for i in range(3): f.append([i] * 3) # Inicializace po řádcích ve zkráceném zápisu g = [[i] * 3 for i in range(3)] # Jak správně zkopírovat pole? b = a c = a[:] d = list(b) e = [ r[:] for r in a ] f = [ list(a[i]) for i in range(len(a))] a[0][0] = -1 b[0][1] = -2 c[0],c[1]=c[1],c[0] d[1][0] = -3 e[1][1] = -4
copy
a funkci deepcopy
. Doplňte import a kopírování do předchozí ukázky a porovnejte výsledky.
import copy d = copy.deepcopy(b)
a = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ]
[[0]*len(a[0]) for i in a]
import time time.sleep(0.5)
''.join('X' if i!=0 else ' ' for i in x)
maximum(M, i)
, která pro zadanou matici M a index (číslo) i najde takový index řádku j v rozsahu range(i, len(M))
jehož absolutní hodnota M[j][i] je maximální. Využijte vestavěnou funkci abs
.
swap_rows(M, i)
, která prohodí řádek i a řádek s indexem j = maximum(M, i)
, pokud i != j
.
do_line(M, i)
, která zavolá funkci swap_rows(M, i)
a pokud:
M[i][i] != 0
:
range(i + 1, len(M))
odečte M[r][i]-násobek řádku i
True
False
GEM(M)
, která pro všechna i z rozsahu range(len(m))
zavolá funkci do_line(M, i)
do_line()
alespoň 1x False, metoda Gauss_elim()
vrací False
. V opačném případě vrací True
.
GEM()
pro matici:
m=[[12,-7,3, 26], [4 ,5,-6, -5], [-7 ,8,9, 21]]
Využijte ve výpočtu úkolu 3 zlomků namísto reálných čísel. K tomu využijte Python modul fraction (from fractions import Fraction
) pomocí kterého přemapujte prvky matice M na typ Fraction (zlomek):
M_fr = [list(map(Fraction, v)) for v in M] GEM(M_fr)
Výsledek GEM lze transformovat zpět na reálná čísla pomocí:
result = [list(map(float, v)) for v in M_fr]
sys.argv[1]
)
1 0 1 0 1 0 1 0 1
c r
, kde c
je číslo sloupce a r
je číslo řádku levého horního rohu vzoru v matici.
Vstup: Vzor ze standardního vstupu:
1 0 1 0 1 0 1 0 1Obsah souboru:
1 2 1 2 3 1 1 2 3 1 1 2 3 2 1 1 1 1 1 1Výstup:
1 0
V zadané matici lze nalézt vzor (tvar připomínající X složený z čísel 2) od řádky 0 do řádky 2 a od sloupce 1 do sloupce 3. Vzor v matici na místech 1 má 2, na místech 0 může být libovolná hodnota pro celý vzor navzájem rozdílná (v tomto případě 1 a 3).
Vstup: Vzor ze standardního vstupu:
1 1 1 1 0 1 1 1 1Obsah souboru:
1 4 1 2 3 3 3 1 1 4 4 4 4 3 1 2 3 4 4 4 4 1 5 1 4 4 4 1 4 4 4 3 4 4 1 1 5 3 5 1 1 1 4 4 4 4 4 4 4Výstup:
3 1
V zadané matici lze nalézt vzor od řádky 1 do řádky 3 a od sloupce 3 do sloupce 5. Vzor v matici na místech 1 má 4, na místech 0 může být libovolná hodnota, zde je také 4.
Vstup: Vzor ze standardního vstupu:
1 0 1 0 0 0 1 0 1Obsah souboru:
1 4 1 2 3 3 3 1 1 4 4 4 4 3 1 2 3 4 4 4 4 1 5 1 5 4 4 1 4 4 4 3 4 4 1 1 5 3 5 1 1 1 4 4 3 4 4 4 4Výstup:
1 3
V zadané matici lze nalézt vzor od řádky 3 do řádky 5 a od sloupce 1 do sloupce 3. Vzor v matici na místech 1 má 5, na místech 0 může být libovolná hodnota, zde hodnota 1, 3, a 4.
sys.argv[1]
) najde největší souvislou podmatici libovolného rozměru, která obsahuje pouze záporné hodnoty. Příklad volání:
python3 rectangle.py matice.txt
Matice matice.txt:
1 -9 -2 8 6 1 8 -1 -11 -7 6 4 10 12 -1 -9 -12 14 8 10 -3 -5 17 8 6 4 10 -13 -16 19
Výstup:
1 2 3 3
Obrovské testovací matice matice.tgz (i ty je nutné spočítat do 50s pro získání plného počtu bodů).