Informatika1-2014/Gyakorlat5
A MathWikiből
A lap korábbi változatát látod, amilyen Kkovacs (vitalap | szerkesztései) 2014. október 14., 02:24-kor történt szerkesztése után volt.
Tartalomjegyzék |
Listákról még
- Listák a listában (mátrix):
M = [[1,2,3],[4,5,6],[7,8,9]]
- Ennek elsõ eleme:
print M[0] # [1,2,3]
- Tehát M elemei listák, így ezeknek is lekérhetjük az elemeit:
print M[0][2] # 3
- Ugyanúgy adhatunk hozzá elemeket, mint korábban:
M.append([10,11,12]) print M # [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
- A belsõ listák hossza eltérhet:
N = [[1,2,5],[4],[3,2,1,4]]
- Bár ez ritka, de keverten szinte bármit tárolhatunk listákban:
H = ["kutya", [1, 5, "macska"], [3, [5, 3]], 5.3]
Listaértelmezések
[kifejezés for elem in bejárható_objektum]
Egy olyan listát hoz létre melyben a kifejezés szerepel a bejárható_objektum minden elemére.
[kifejezés for elem in bejárható_objektum if feltétel]
Mint az elõzõ, de csak azok az elemek lesznek benne melyekre teljesül a feltétel.
[kifejezés for elem1 in bejárható_objektum1 if feltétel1 for elem2 in bejárható_objektum2 if feltétel2 for elemN in bejárható_objektumN if feltételN]
Több feltétel is ciklus is írható akár.
Pl:
[x ** 2 for x in [1, 2, 3, 4]] # [1, 4, 9, 16] [x for x in [-1, 2, -3, 4] if x > 0] # [2, 4]
Ismétlés a feladatok elõtt
Függvények használata függvényekben
Használhatunk minden általunk definiált függvényt a függvényinkben. Pl:
def hatvany(x, n): return x ** n def fv(x): return hatvany(x, 3) + 2 * hatvany(x, 2) + 2 * x + 1
Collatz sejtéses feladat clean code stílusban:
def paros(n): if n % 2 == 0: return True else: return False def collatz_lepes(n): if paros(n): return n / 2 else: return n * 3 + 1 def collatz(n): while n != 1: n = collatz_lepes(n) print n
Listákkal manipulálása függvényekkel
- Tekintsük a következõ függvényt, mely egy számokat tartalmazó listát kap és vissza szeretné adni a listát melyben a számok négyzetei vannak:
def negyzet1(L): for e in L: e = e ** 2 return L L = [1, 3, 5] print negyzet1(L) # [1, 3, 5]
Nem úgy mûködik ahogy szeretnénk, mert a for ciklus e változója csak egy másolata a lista adott elemének, nem az elem maga, így ha négyzetre emeljük attól még a listában nem történik változás.
- Próbáljuk akkor közvetlenül elérni az elemeket indexekkel:
def negyzet2(L): i = 0 while i < len(L): L[i] = L[i] ** 2 i += 1 return L L = [1, 3, 5] print negyzet2(L) # [1, 9, 25] print L
def negyzet3(L): retval = [] for e in L: retval.append(e ** 2) return retval