You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

061 Set.ipynb 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {
  6. "slideshow": {
  7. "slide_type": "slide"
  8. }
  9. },
  10. "source": [
  11. "# Software Entwicklung \n",
  12. "\n",
  13. "## Kapitel 6: Mengen und Dictionaries"
  14. ]
  15. },
  16. {
  17. "cell_type": "markdown",
  18. "metadata": {
  19. "slideshow": {
  20. "slide_type": "slide"
  21. }
  22. },
  23. "source": [
  24. "### 6.1 Mengen\n",
  25. "\n",
  26. "*Listen* sind keine *Mengen* im mathematischen Sinne, weil\n",
  27. "\n",
  28. "* die Elemente eine Reihenfolge besitzen (was bei Mengen im Allgeinen nicht der Fall ist)\n",
  29. "* Elemente mehrfach in der Liste vorkommen können (was bei Mengen nicht möglich ist)\n",
  30. "\n",
  31. "Eine Liste kann mit Hilfe der Built-In-Funktion\n",
  32. "<code>set</code> in eine Menge umgewandelt werden."
  33. ]
  34. },
  35. {
  36. "cell_type": "code",
  37. "execution_count": null,
  38. "metadata": {
  39. "pycharm": {
  40. "name": "#%%\n"
  41. }
  42. },
  43. "outputs": [],
  44. "source": [
  45. "menge = set([1, 2, 3])\n",
  46. "print(type(menge))"
  47. ]
  48. },
  49. {
  50. "cell_type": "markdown",
  51. "metadata": {
  52. "pycharm": {
  53. "name": "#%% md\n"
  54. },
  55. "slideshow": {
  56. "slide_type": "slide"
  57. }
  58. },
  59. "source": [
  60. "Duplikate werden bereinigt, d.h. identische Werte sind anschließend nur einmal enthalten."
  61. ]
  62. },
  63. {
  64. "cell_type": "code",
  65. "execution_count": null,
  66. "metadata": {
  67. "pycharm": {
  68. "name": "#%%\n"
  69. }
  70. },
  71. "outputs": [],
  72. "source": [
  73. "menge = set([1, 1, 3])\n",
  74. "print(len(menge))\n",
  75. "print(menge)"
  76. ]
  77. },
  78. {
  79. "cell_type": "markdown",
  80. "metadata": {
  81. "slideshow": {
  82. "slide_type": "slide"
  83. }
  84. },
  85. "source": [
  86. "Da die Elemente in einer Menge keine Reihenfolge besitzen, ist der Zugriff mit Hilfe\n",
  87. "eines Index nicht möglich."
  88. ]
  89. },
  90. {
  91. "cell_type": "code",
  92. "execution_count": null,
  93. "metadata": {
  94. "pycharm": {
  95. "name": "#%%\n"
  96. }
  97. },
  98. "outputs": [],
  99. "source": [
  100. "menge = set([1, 2, 3])\n",
  101. "print(menge[1])"
  102. ]
  103. },
  104. {
  105. "cell_type": "markdown",
  106. "metadata": {
  107. "slideshow": {
  108. "slide_type": "slide"
  109. }
  110. },
  111. "source": [
  112. "Allerdings kann in der bekannten Form über eine Menge iteriert werden. Die Reihenfolge ist\n",
  113. "nicht festgelegt und kann sich ggf. von Rechner zu Rechner unterscheiden."
  114. ]
  115. },
  116. {
  117. "cell_type": "code",
  118. "execution_count": null,
  119. "metadata": {
  120. "pycharm": {
  121. "name": "#%%\n"
  122. }
  123. },
  124. "outputs": [],
  125. "source": [
  126. "menge = set([1, 2, 3])\n",
  127. "for zahl in menge:\n",
  128. " print(zahl)"
  129. ]
  130. },
  131. {
  132. "cell_type": "markdown",
  133. "metadata": {
  134. "slideshow": {
  135. "slide_type": "slide"
  136. }
  137. },
  138. "source": [
  139. "Die Elemente in einem Set müssen einen unveränderlichen Datentyp besitzen, d.h. Listen\n",
  140. "sind z.B. keine zulässigen Elemente eines Sets."
  141. ]
  142. },
  143. {
  144. "cell_type": "code",
  145. "execution_count": null,
  146. "metadata": {
  147. "pycharm": {
  148. "name": "#%%\n"
  149. }
  150. },
  151. "outputs": [],
  152. "source": [
  153. "liste1 = [1, 2]\n",
  154. "liste2 = [3, 4]\n",
  155. "\n",
  156. "liste_der_listen = [liste1, liste2]\n",
  157. "\n",
  158. "menge = set(liste_der_listen)\n",
  159. "print(len(menge))"
  160. ]
  161. },
  162. {
  163. "cell_type": "markdown",
  164. "metadata": {
  165. "slideshow": {
  166. "slide_type": "slide"
  167. }
  168. },
  169. "source": [
  170. "Bei Mengen in Python unterscheiden sich Gleichheit und Identität, d.h.\n",
  171. "Mengen sind selbst auch veränderliche Datentypen."
  172. ]
  173. },
  174. {
  175. "cell_type": "code",
  176. "execution_count": null,
  177. "metadata": {
  178. "pycharm": {
  179. "name": "#%%\n"
  180. }
  181. },
  182. "outputs": [],
  183. "source": [
  184. "menge1 = set([])\n",
  185. "menge2 = set([])\n",
  186. "\n",
  187. "if menge1 == menge2:\n",
  188. " print(\"Gleich!\")\n",
  189. "\n",
  190. "if menge1 is menge2:\n",
  191. " print(\"Identisch!\")"
  192. ]
  193. },
  194. {
  195. "cell_type": "markdown",
  196. "metadata": {
  197. "slideshow": {
  198. "slide_type": "slide"
  199. }
  200. },
  201. "source": [
  202. "Elemente können mit <code>add</code> hinzugefügt und mit <code>remove</code> entfernt werden."
  203. ]
  204. },
  205. {
  206. "cell_type": "code",
  207. "execution_count": null,
  208. "metadata": {
  209. "pycharm": {
  210. "name": "#%%\n"
  211. }
  212. },
  213. "outputs": [],
  214. "source": [
  215. "menge = set([1, 2, 3])\n",
  216. "menge.add(2)\n",
  217. "menge.remove(3)\n",
  218. "for zahl in menge:\n",
  219. " print(zahl)"
  220. ]
  221. },
  222. {
  223. "cell_type": "markdown",
  224. "metadata": {
  225. "slideshow": {
  226. "slide_type": "slide"
  227. }
  228. },
  229. "source": [
  230. "Die Überprüfung, ob ein Element in einer Menge ist, erfolgt wieder mit dem Operator <code>in</code>."
  231. ]
  232. },
  233. {
  234. "cell_type": "code",
  235. "execution_count": null,
  236. "metadata": {
  237. "pycharm": {
  238. "name": "#%%\n"
  239. }
  240. },
  241. "outputs": [],
  242. "source": [
  243. "menge = set([1, 2, 3])\n",
  244. "if 4 in menge:\n",
  245. " print(\"Enthalten!\")\n",
  246. "liste = [1, 2, 3]\n",
  247. "if 3 in liste:\n",
  248. " print(\"E\")"
  249. ]
  250. },
  251. {
  252. "cell_type": "markdown",
  253. "metadata": {
  254. "slideshow": {
  255. "slide_type": "slide"
  256. }
  257. },
  258. "source": [
  259. "Aufgrund der Einschränkungen, die mit einer Menge verbunden sind (keine Reihenfolge,\n",
  260. "jedes Element max. einmal enthalten), kann Python einige Operationen performanter ausführen\n",
  261. "als bei einer Liste.\n",
  262. "\n",
  263. "Im nachfolgenden Beispiel erwartet <code>timeit</code> als erstes Argument eine\n",
  264. "Funktion, die dann <code>number</code>-mal ausgeführt wird. Zurückgegeben wird die\n",
  265. "Ausführungszeit.\n"
  266. ]
  267. },
  268. {
  269. "cell_type": "code",
  270. "execution_count": null,
  271. "metadata": {
  272. "pycharm": {
  273. "name": "#%%\n"
  274. },
  275. "slideshow": {
  276. "slide_type": "subslide"
  277. }
  278. },
  279. "outputs": [],
  280. "source": [
  281. "import timeit\n",
  282. "\n",
  283. "liste = list(range(100000))\n",
  284. "menge = set(liste)\n",
  285. "\n",
  286. "dauer_bei_liste = timeit.timeit(lambda:50000 in liste, number=10000)\n",
  287. "print(f\"Liste {dauer_bei_liste}\")\n",
  288. "\n",
  289. "dauer_bei_menge = timeit.timeit(lambda:50000 in menge, number=10000)\n",
  290. "print(f\"Menge {dauer_bei_menge}\")"
  291. ]
  292. },
  293. {
  294. "cell_type": "markdown",
  295. "metadata": {
  296. "slideshow": {
  297. "slide_type": "slide"
  298. }
  299. },
  300. "source": [
  301. "Darüber hinaus bietet eine Menge einige Mengenoperationen mittels Infix-Operator:\n",
  302. "\n",
  303. "* <code>&</code> liefert die Schnittmenge zweier Mengen\n",
  304. "* <code>|</code> liefert die Vereinigungsmenge zweier Mengen\n",
  305. "* <code>-</code> liefert die Differnzmenge, d.h. die erste Menge ohne die Elemente der zweiten Menge"
  306. ]
  307. },
  308. {
  309. "cell_type": "code",
  310. "execution_count": null,
  311. "metadata": {
  312. "pycharm": {
  313. "name": "#%%\n"
  314. },
  315. "slideshow": {
  316. "slide_type": "subslide"
  317. }
  318. },
  319. "outputs": [],
  320. "source": [
  321. "menge1 = set([1, 2, 3])\n",
  322. "menge2 = set([2, 4, 6])\n",
  323. "\n",
  324. "schnittmenge = menge1 & menge2\n",
  325. "vereinigungsmenge = menge1 | menge2\n",
  326. "differenzmenge = menge1 - menge2\n",
  327. "\n",
  328. "print(f\"Schnittmenge {schnittmenge}\")\n",
  329. "print(f\"Vereinigungsmenge {vereinigungsmenge}\")\n",
  330. "print(f\"Differenzmenge {differenzmenge}\")\n",
  331. "print(f\"dd{1+2}dd\")\n",
  332. "\n",
  333. "text = \"dd{1+2}dd\"\n",
  334. "print(len(text))\n"
  335. ]
  336. }
  337. ],
  338. "metadata": {
  339. "celltoolbar": "Slideshow",
  340. "kernelspec": {
  341. "display_name": "Python 3 (ipykernel)",
  342. "language": "python",
  343. "name": "python3"
  344. },
  345. "language_info": {
  346. "codemirror_mode": {
  347. "name": "ipython",
  348. "version": 3
  349. },
  350. "file_extension": ".py",
  351. "mimetype": "text/x-python",
  352. "name": "python",
  353. "nbconvert_exporter": "python",
  354. "pygments_lexer": "ipython3",
  355. "version": "3.9.9"
  356. }
  357. },
  358. "nbformat": 4,
  359. "nbformat_minor": 1
  360. }