{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Listaértelmezés, generátorkifejezés\n", "A listaértelmezés azonnal kiértékelődik és egy listát ad vissza, ami bejárható (iterálható, *iterable*) objektum.\n", "\n", "A generátorkifejezés egy bejáró (iterátor, *iterator*), ami – mint minden bejáró – egyúttal bejárható. \n", "\n", "A bejárható objektum olyan, amelynek elemein végigjárhatunk (pl. lista). Ha átadjuk az `iter()` metódusnak, egy bejáró keletkezik. A bejáró (*iterator*) olyan objektum, mely egy bejárható objektumon végigfut a `__next__()` metódussal." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for num in [2, 3, 5, 7]:\n", " print(num, end=' ')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "numbs = [2, 3, 5, 7]\n", "iterator_obj = iter(numbs)\n", "print(next(iterator_obj))\n", "print(next(iterator_obj))\n", "print(next(iterator_obj))\n", "print(next(iterator_obj))\n", "print(next(iterator_obj))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "iterator_obj = iter(numbs)\n", "try:\n", " print(next(iterator_obj), end=' ')\n", " print(next(iterator_obj), end=' ')\n", " print(next(iterator_obj), end=' ')\n", " print(next(iterator_obj), end=' ')\n", " print(next(iterator_obj)) #StopIteration error\n", "except:\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lássuk még egyszer a különbségeket:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lst = [n for n in range(10000)]\n", "gen = (n for n in range(10000))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(type(lst), type(gen))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from sys import getsizeof\n", "print(getsizeof(lst), getsizeof(gen))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i in lst:\n", " if i == 100:\n", " print(i)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i in gen:\n", " if i == 100:\n", " print(i)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lst[100]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "gen[100] # we can iterate through the items" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A generátor nem indexelhető, és csak egyszer futhatunk végig az elemein, így – ellentétben a listával –, egymásba ágyazott ciklusoknál nem lehet mindkét bejárható objektum generátor kifejezés:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "g1=(i for i in range(3))\n", "g2=(j for j in range(3))\n", "for i in g1:\n", " for j in g2:\n", " print(i,j)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# minden ciklusban újra kell generálni g2-t\n", "g1=(i for i in range(3))\n", "for i in g1:\n", " g2=(j for j in range(3))\n", " for j in g2:\n", " print(i,j)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Feltételes relatív gyakoriság\n", "Eldobunk egy piros és egy kék kockát. A rajtuk lévő számok összege legyen *s*. Mi a **relatív gyakorisága** annak, hogy a piros kockán 1-es van, **feltéve**, hogy a két kockán lévő számok összege *s* egy előre megadott, rögzített szám?\n", "Mi a relatív gyakorisága bármely másik számnak, **feltéve**, hogy a két kockán lévő számok összege *s*? Mely *s* összeg esetén lesz egy szám ezen feltétel melletti relatív gyakorisága közel az 1/6-hoz?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from random import randint" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "two = [red, _] = [randint(1,6), randint(1,6)]\n", "two, red" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "two = [randint(1,6), randint(1,6)]\n", "red = two[0]\n", "two, red" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s = sum(two)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "two, s, red" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sum2 = 7 # sum of the two numbers (2..12)\n", "die = 1 # the number on the die we are waiting for (1..6)\n", "count = 0 # counter of the cases with sum == \n", "count_red = 0 # counter when the red die == \n", "\n", "for i in range(10000):\n", " two = [randint(1,6), randint(1,6)]\n", " red = two[0]\n", " s = sum(two)\n", " if s == sum2:\n", " count += 1\n", " if red == die:\n", " count_red += 1\n", "print(count_red/count, 1/6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Feltételes valószínűség\n", "Eldobunk egy piros és egy kék kockát. A rajtuk lévő számok összege legyen *s*. Mi a valószínűsége, hogy a piros kockán lévő szám épp *r*, feltéve hogy az összeg az előre megadott *s* szám? Mely *s* értékekre lesz e valószínűség 1/6?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sum2 = 7 # sum of the two numbers \n", "die = 2 # the number on the die we are waiting for\n", "count = 0 # counter of the cases with sum == \n", "count_red = 0 # counter when the red die == \n", "\n", "for red in range(1, 7):\n", " for blue in range(1, 7):\n", " s = red + blue\n", " if s == sum2:\n", " count += 1\n", " if red == die:\n", " count_red += 1\n", "print(count_red/count, 1/6)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 4 }