Sticky MAP, LAMBDA und ABSTRAKTIONEN

    This site uses cookies. By continuing to browse this site, you are agreeing to our use of cookies. More details

    • MAP, LAMBDA und ABSTRAKTIONEN



      OK, hier mal ein paar Beispiele zu Interessanten Konzepten in PYTHON. Damit die Ergebnisse des Skripts mehr Sinn ergeben, muss man natürlich in den Code schauen, denn dort werden die Konzepte gegenüber gestellt, um Vor- und Nachteile zu veranschaulichen. Das ganze ist als REZEPT markiert, weil es die Konzepte kurz und knapp gegenüberstellt und (so hoffe ich) als eine Art Merkzettel oder "Cheat-Sheet" herhalten kann.

      (PS: Je mehr Python Skripte hier hochgeladen werden, desto höher wird wohl die Wahrscheinlichkeit sein, dass ich bald die Skript-Highlighting Engine nochmal anpassen werde, denn das aktuelle Python Highlighting (vor allem bei Strings) verträgt sich nicht mit unserem im Forum verwendeten Stil :D.)


      Python Source Code

      1. # -*- coding: utf-8 -*-
      2. '''
      3. Created on 14.09.2014
      4. @author: Jeffo
      5. '''
      6. # IMPORTE
      7. from math import sqrt
      8. ''' Rekursive Mengen-Abstraktion (letztes Beispiel in der "main()"-Funktion '''
      9. def recPrime(n):
      10. if n == 0:
      11. return []
      12. elif n == 1:
      13. return [1]
      14. else:
      15. ''' der rekursive Aufruf '''
      16. p = recPrime(int(sqrt(n)))
      17. noPrimes = {j for i in p for j in range(i * 2, i)}
      18. p = {x for x in range(2, n) if x not in noPrimes}
      19. ''' Rückgabe '''
      20. return p
      21. def main():
      22. ''' HEADER '''
      23. print("\t__// EIN PAAR BEISPIELE ZU MAP, LAMBDAS UND ABSTRAKTIONEN \\\\__\n")
      24. ''' MAP und LAMBDA (=ANONYME FUNKTIONEN) BEISPIEL '''
      25. squaresML = list(map(lambda x: x**2, range(1, 10)))
      26. print("..:: Quadratzahlen mit MAP und LAMBDA ::..")
      27. print(squaresML)
      28. print('\n')
      29. ''' DAS SELBE MIT LISTEN-ABSTRAKTION ("LIST COMPREHENSION")
      30. LISTENABSTRAKTION IST DER MATHEMATISCHEN SCHREIBWEISE ANGELEHNT
      31. Z.B. "{x² | x € Z}
      32. '''
      33. squaresLC = [x**2 for x in range(1, 10)]
      34. print("..:: Quadratzahlen mit LISTEN-ABSTRAKTION (MATHEMATISCHE NOTATION) ::..")
      35. print(squaresLC)
      36. print("..:: Ein weiteres Beispiel mit LISTEN-ABSTRAKTION (Temperatur-Umwandlungen) ::..")
      37. Celsius = [30.5, 22.0, 48.0, 25.5]
      38. print([((float(9)/5) * x + 32) for x in Celsius])
      39. print("..:: Ein weiteres Beispiel mit LISTEN-ABSTRAKTION (Kreuzprodukt zweier Listen) ::..")
      40. listOne = ["rot", "grün", "gelb"]
      41. listTwo = ["Haus", "Auto"]
      42. print([(x,y) for x in listOne for y in listTwo])
      43. print("..:: Ein weiteres Beispiel mit LISTEN-ABSTRAKTION (2er Tupel von 1-6, deren Summe = 7) ::..")
      44. ''' Das mit der Summe sähe in der klassischen Programmierung so aus:
      45. t = []
      46. for x in range(1,7):
      47. for y in range(1,7):
      48. if x + y == 7:
      49. t.append((x,y))
      50. '''
      51. print([(x,y) for x in range(1,7) for y in range(1,7) if x + y ==7])
      52. print('\n')
      53. print("..:: Beispiel Primzahlen mit LISTEN-ABSTRAKTION (= doppelte Einträge) ::..")
      54. n = 100
      55. sqrt_n = int(sqrt(n))
      56. noPrimes = [j for i in range(2, sqrt_n) for j in range(i * 2, n, i)]
      57. primes = [x for x in range(n) if x not in noPrimes]
      58. print(primes)
      59. print('\n')
      60. print("(BEMERKUNG : In der Liste \"noPrimes\" (siehe Code bzw. unten) sind doppelte Einträge vorhanden):")
      61. print("noPrimes = ")
      62. print(noPrimes)
      63. print('\nDeshalb nehmen wir uns die Mengen-Abstraktion (SET-COMPREHENSION) zuhilfe,'\
      64. ' denn in Mengen sind ja keine doppelten Einträge vorhanden !')
      65. ''' MENGEN-ABSTRAKTION (SET-COMPREHENSION) '''
      66. sqrt_n = int(sqrt(n))
      67. ''' Der einzigste Unterschied ist die Verwendung von Python "Mengenklammern" statt der "Listenklammern" !!! '''
      68. noPrimes = {j for i in range(2, sqrt_n) for j in range(i * 2, n, i)}
      69. primes = [x for x in range(n) if x not in noPrimes]
      70. print(primes)
      71. print('\n')
      72. print("(BEMERKUNG : In der Liste \"noPrimes\" (siehe Code bzw. unten) sind NUN keine doppelten Einträge mehr vorhanden):")
      73. print("noPrimes = ")
      74. print(noPrimes)
      75. print('\n')
      76. ''' GENERATOREN-ABSTRAKTION (GENERATOR-COMPREHENSION) '''
      77. print("..:: Nun zu der Generatoren-Abstraktion (Generator-Comprehension) ::..")
      78. ''' MAN ERZEUGT EIN GENERATOR-OBJEKT STATT EINER LISTE, SO WIRD AUS
      79. "sum([x**2 for x in range(1,11)])"
      80. durch die Verwendung eines Generators
      81. "sum(x**2 for x in range(1,11))" bzw. falls man keine Reduktionsfunktion wie sum verwendet:
      82. "someFunction((x**2 for x in range(1,11)))" --> Man beachte die IN DIESEN FÄLLEN notwendigen
      83. Klammern ! '''
      84. print("{sum(x²) | 1 <= x <= 10} = %d" % sum(x**2 for x in range(1,11)))
      85. print('\n')
      86. ''' ZU GUTERLETZT NOCHMAL EIN REKURSIVES PRIM-BEISPIEL '''
      87. print("..:: Zum Abschluss noch ein rekursives Prim-Beispiel unter Verwendung von Mengen-Abstraktion ::..")
      88. print(recPrime(1024))
      89. if __name__ == '__main__':
      90. main()
      Display All