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.

034 Comprehensions.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 3: Listen und Tupel\n",
  14. "\n",
  15. "### 3.7 List Comprehensions\n",
  16. "\n",
  17. "Mit Hilfe von *List Comprehensions* können Listen basierend auf bestehenden Listen oder Sequenzen erzeugt werden. \n",
  18. "Dazu wird die bestehende Sequenz mit einer <code>for</code>-Schleife durchlaufen und die einzelnen Elemente zu einer\n",
  19. "neuen Liste zusammengefasst. Die Syntax dazu sieht so aus:\n"
  20. ]
  21. },
  22. {
  23. "cell_type": "code",
  24. "execution_count": null,
  25. "metadata": {
  26. "pycharm": {
  27. "is_executing": false,
  28. "name": "#%%\n"
  29. }
  30. },
  31. "outputs": [],
  32. "source": [
  33. "alte_liste = [1, 2, 3]\n",
  34. "neue_liste = [x for x in alte_liste]\n",
  35. "print(neue_liste)"
  36. ]
  37. },
  38. {
  39. "cell_type": "markdown",
  40. "metadata": {
  41. "slideshow": {
  42. "slide_type": "slide"
  43. }
  44. },
  45. "source": [
  46. "Natürlich sind auch Funktionsaufrufe möglich."
  47. ]
  48. },
  49. {
  50. "cell_type": "code",
  51. "execution_count": null,
  52. "metadata": {
  53. "pycharm": {
  54. "is_executing": false,
  55. "name": "#%%\n"
  56. }
  57. },
  58. "outputs": [],
  59. "source": [
  60. "alte_liste = ['Hello', 'World!']\n",
  61. "neue_liste = [len(word) for word in alte_liste]\n",
  62. "print(neue_liste)"
  63. ]
  64. },
  65. {
  66. "cell_type": "markdown",
  67. "metadata": {
  68. "slideshow": {
  69. "slide_type": "slide"
  70. }
  71. },
  72. "source": [
  73. "Durch das Ergänzen eines <code>if</code> können Elemente der ursprünglichen Liste bzw. Sequenz \n",
  74. "ausgelassen werden."
  75. ]
  76. },
  77. {
  78. "cell_type": "code",
  79. "execution_count": null,
  80. "metadata": {
  81. "pycharm": {
  82. "is_executing": false,
  83. "name": "#%%\n"
  84. }
  85. },
  86. "outputs": [],
  87. "source": [
  88. "neue_liste = [x for x in range(20) if x%2 == 0 ]\n",
  89. "print(neue_liste)"
  90. ]
  91. },
  92. {
  93. "cell_type": "markdown",
  94. "metadata": {
  95. "slideshow": {
  96. "slide_type": "slide"
  97. }
  98. },
  99. "source": [
  100. "### 3.8 Listen und Strings\n",
  101. "\n",
  102. "Gelegentlich möchte man einen String in einzelne Wörter zerlegen und diese als\n",
  103. "Liste zurückgeliefert bekommen. Hierzu dient die Operation <code>split</code>, die \n",
  104. "in Dot-Notation im Datentyp String enthalten ist."
  105. ]
  106. },
  107. {
  108. "cell_type": "code",
  109. "execution_count": null,
  110. "metadata": {
  111. "pycharm": {
  112. "is_executing": false,
  113. "name": "#%%\n"
  114. }
  115. },
  116. "outputs": [],
  117. "source": [
  118. "text =\"Software Entwicklung macht Spaß\"\n",
  119. "liste = text.split()\n",
  120. "print(liste)"
  121. ]
  122. },
  123. {
  124. "cell_type": "markdown",
  125. "metadata": {
  126. "slideshow": {
  127. "slide_type": "slide"
  128. }
  129. },
  130. "source": [
  131. "Normalerweise verwendet <code>split</code> ein *Whitespace*-Zeichen (d.h. Leerzeichen, Tabulator, neue Zeile,...)\n",
  132. "als Trennzeichen für die Zerlegung. Es kann jedoch auch eine andere Zeichenkette festgelegt werden. "
  133. ]
  134. },
  135. {
  136. "cell_type": "code",
  137. "execution_count": null,
  138. "metadata": {
  139. "pycharm": {
  140. "is_executing": false,
  141. "name": "#%%\n"
  142. }
  143. },
  144. "outputs": [],
  145. "source": [
  146. "text = \"der, die, das, wieso, weshalb, warum\"\n",
  147. "liste = text.split(\", \")\n",
  148. "print(liste)"
  149. ]
  150. },
  151. {
  152. "cell_type": "markdown",
  153. "metadata": {},
  154. "source": [
  155. "Hinweis: Mehrere unterschiedliche Trennzeichen sind mit der Standard-<code>split</code>-Funktion nicht realisierbar. \n",
  156. "Dazu benötigt man *reguläre Ausdrücke*, die zu einem späteren Zeitpunkt eingeführt werden."
  157. ]
  158. },
  159. {
  160. "cell_type": "markdown",
  161. "metadata": {
  162. "slideshow": {
  163. "slide_type": "slide"
  164. }
  165. },
  166. "source": [
  167. "Soll umgekehrt aus einer Liste von einzelnen Wörtern ein String zusammengesetzt werden, kann die \n",
  168. "Funktion <code>join</code> genutzt werden. Sie wird in der Dot-Notation mit einem String verwendet,\n",
  169. "der die einzufügenden Trennzeichen enthält."
  170. ]
  171. },
  172. {
  173. "cell_type": "code",
  174. "execution_count": null,
  175. "metadata": {
  176. "pycharm": {
  177. "is_executing": false,
  178. "name": "#%%\n"
  179. }
  180. },
  181. "outputs": [],
  182. "source": [
  183. "liste = [\"das\", \"ist\", \"das\", \"Haus\", \"vom\", \"Nikolaus\"]\n",
  184. "text = \"\".join(liste)\n",
  185. "print(text)"
  186. ]
  187. },
  188. {
  189. "cell_type": "markdown",
  190. "metadata": {
  191. "slideshow": {
  192. "slide_type": "slide"
  193. }
  194. },
  195. "source": [
  196. "### 3.9 Slicing\n",
  197. "\n",
  198. "Viele Sequenztypen in Python (bisher bekannt: Listen, Tupel, Strings, Ranges) können mittels *Slicing* \n",
  199. "zurechtgeschnitten werden. Dazu werden der Index des ersten zu berücksichtigenden Elements und der\n",
  200. "Index des ersten nicht mehr zu berücksichtigenden Elements getrennt durch einen Doppelpunkt angegeben."
  201. ]
  202. },
  203. {
  204. "cell_type": "code",
  205. "execution_count": null,
  206. "metadata": {
  207. "pycharm": {
  208. "is_executing": false,
  209. "name": "#%%\n"
  210. }
  211. },
  212. "outputs": [],
  213. "source": [
  214. "liste = ['A', 'B', 'C', 'D', 'E']\n",
  215. "middle = liste[1:4]\n",
  216. "print(middle)"
  217. ]
  218. },
  219. {
  220. "cell_type": "markdown",
  221. "metadata": {
  222. "pycharm": {
  223. "name": "#%% md\n"
  224. },
  225. "slideshow": {
  226. "slide_type": "slide"
  227. }
  228. },
  229. "source": [
  230. "Wird einer der Indexwerte weggelassen, so bedeutet dies, dass der Ausschnitt am Anfang beginnt bzw. bis\n",
  231. "zum Ende reicht."
  232. ]
  233. },
  234. {
  235. "cell_type": "code",
  236. "execution_count": null,
  237. "metadata": {
  238. "pycharm": {
  239. "is_executing": false,
  240. "name": "#%%\n"
  241. }
  242. },
  243. "outputs": [],
  244. "source": [
  245. "liste = ['A', 'B', 'C', 'D', 'E']\n",
  246. "anfang = liste[:3]\n",
  247. "print(anfang)\n",
  248. "ende = liste[2:]\n",
  249. "print(ende)"
  250. ]
  251. },
  252. {
  253. "cell_type": "markdown",
  254. "metadata": {
  255. "slideshow": {
  256. "slide_type": "slide"
  257. }
  258. },
  259. "source": [
  260. "Natürlich funktionieren auch negative Indizes."
  261. ]
  262. },
  263. {
  264. "cell_type": "code",
  265. "execution_count": null,
  266. "metadata": {
  267. "pycharm": {
  268. "is_executing": false,
  269. "name": "#%%\n"
  270. }
  271. },
  272. "outputs": [],
  273. "source": [
  274. "liste = ['A', 'B', 'C', 'D', 'E']\n",
  275. "middle = liste[1:-1]\n",
  276. "print(middle)"
  277. ]
  278. },
  279. {
  280. "cell_type": "markdown",
  281. "metadata": {
  282. "slideshow": {
  283. "slide_type": "slide"
  284. }
  285. },
  286. "source": [
  287. "Und schließlich kann durch Angabe eines dritten Parameters eine Schrittweite vorgegeben werden. "
  288. ]
  289. },
  290. {
  291. "cell_type": "code",
  292. "execution_count": null,
  293. "metadata": {
  294. "pycharm": {
  295. "is_executing": false,
  296. "name": "#%%\n"
  297. }
  298. },
  299. "outputs": [],
  300. "source": [
  301. "sequenz = range(20)\n",
  302. "gerade = sequenz[0::2]\n",
  303. "print(list(gerade))"
  304. ]
  305. },
  306. {
  307. "cell_type": "markdown",
  308. "metadata": {},
  309. "source": [
  310. "Auch negative Schrittweiten sind zulässig. Die Sequenz wird dann von hinten durchlaufen."
  311. ]
  312. },
  313. {
  314. "cell_type": "code",
  315. "execution_count": null,
  316. "metadata": {
  317. "pycharm": {
  318. "is_executing": false,
  319. "name": "#%%\n"
  320. }
  321. },
  322. "outputs": [],
  323. "source": [
  324. "text = \"TH Nürnberg\"\n",
  325. "print(text[::-1])\n"
  326. ]
  327. }
  328. ],
  329. "metadata": {
  330. "celltoolbar": "Slideshow",
  331. "kernelspec": {
  332. "display_name": "Python 3 (ipykernel)",
  333. "language": "python",
  334. "name": "python3"
  335. },
  336. "language_info": {
  337. "codemirror_mode": {
  338. "name": "ipython",
  339. "version": 3
  340. },
  341. "file_extension": ".py",
  342. "mimetype": "text/x-python",
  343. "name": "python",
  344. "nbconvert_exporter": "python",
  345. "pygments_lexer": "ipython3",
  346. "version": "3.9.9"
  347. },
  348. "pycharm": {
  349. "stem_cell": {
  350. "cell_type": "raw",
  351. "metadata": {
  352. "collapsed": false
  353. },
  354. "source": []
  355. }
  356. }
  357. },
  358. "nbformat": 4,
  359. "nbformat_minor": 1
  360. }