Heim  >  Artikel  >  Backend-Entwicklung  >  Codegolf in Python

Codegolf in Python

王林
王林nach vorne
2023-08-19 23:25:19816Durchsuche

Codegolf in Python

Codegolf ist ein Programmierwettbewerb, bei dem die Teilnehmer herausgefordert werden, ein Programm zu schreiben, das ein bestimmtes Problem in möglichst wenigen Zeichen löst. Mit anderen Worten: Beim Code-Golf geht es darum, sauberen Code zu schreiben. Während Code Golfing in jeder Programmiersprache durchgeführt werden kann, ist Python aufgrund seiner prägnanten Syntax und leistungsstarken integrierten Funktionen besonders für diese Herausforderung geeignet.

In diesem Artikel werden wir einige Tipps und Strategien für Code Golf in Python untersuchen und gleichzeitig anwendbare Beispiele und Ergebnisse bereitstellen.

Verwenden Sie Listenverständnisse

Listenverständnisse sind ein leistungsstarkes Werkzeug in Python, um Listen auf prägnante und lesbare Weise zu erstellen. Beim Code-Golf können Listenverständnisse längere Schleifen und bedingte Anweisungen ersetzen. Betrachten Sie beispielsweise den folgenden Code, der eine Liste mit allen geraden Zahlen zwischen 1 und 10 erstellt:

even_numbers = []
for i in range(1, 11):
    if i % 2 == 0:
        even_numbers.append(i)

Dieser Code kann mithilfe von Listenverständnissen auf eine Zeile reduziert werden:

Die chinesische Übersetzung von

Beispiel

lautet:

Beispiel

even_numbers = [i for i in range(1, 11) if i % 2 == 0]
print(even_numbers)

Ausgabe

[2, 4, 6, 8, 10]

Dieser Code verwendet Listenverständnisse anstelle einer for-Schleife und der append()-Methode, um dieselbe Liste gerader Zahlen zwischen 1 und 10 wie im vorherigen Beispiel zu generieren. Durch die Verwendung von Listenverständnissen kann die zum Erreichen eines Ergebnisses erforderliche Codemenge erheblich reduziert werden, was sie zu einem leistungsstarken Werkzeug im Code-Golf macht.

Eingebaute Funktionen nutzen

Python verfügt über eine breite Palette integrierter Funktionen, um gängige Vorgänge auf prägnante Weise auszuführen. Beim Code-Golf ist es wichtig, sich mit diesen Funktionen und ihrer Syntax vertraut zu machen. Betrachten Sie beispielsweise den folgenden Code, der die Summe aller geraden Zahlen zwischen 1 und 10 berechnet:

even_numbers = [i for i in range(1, 11) if i % 2 == 0]
even_sum = 0
for num in even_numbers:
    even_sum += num

Mit der integrierten Funktion sum() kann dieser Code in einer Zeile zusammengefasst werden:

Die chinesische Übersetzung von

Beispiel

lautet:

Beispiel

even_sum = sum([i for i in range(1, 11) if i % 2 == 0])
print(even_sum)

Ausgabe

30

Es ist weniger Code erforderlich, um mithilfe von sum() und Listenverständnissen eine Liste gerader Zahlen von 1 bis 10 zu generieren und deren Summe als Ausgabe auszugeben.

Verwenden Sie Verknüpfungen

In Python gibt es einige Verknüpfungen und Abkürzungen, die die für bestimmte Vorgänge erforderliche Codemenge effektiv reduzieren können. Schauen wir uns zum Beispiel den folgenden Code an, der überprüft, ob ein bestimmter Wert in einer Liste vorhanden ist:

a, b = 0, 1
for i in range(10):
    print(a)
    a, b = b, a+b

Dieser Code kann mithilfe der Lambda-Funktion und der Funktion Reduce() im Functools-Modul in einer Zeile zusammengefasst werden:

Die chinesische Übersetzung von

Beispiel

lautet:

Beispiel

from functools import reduce
print(*(reduce(lambda f, _: f+[f[-1]+f[-2]], range(8), [0, 1])), sep='\n')

Ausgabe

3
0
1
1
2
3
5
8
13

Dieses Programm verwendet die Funktionen Reduce() und Lambda, um die Anzahl der Vokale in „Hello, World!“ zu zählen, generiert die ersten 8 Fibonacci-Zahlen und gibt dann die Sequenz aus.

Lambda-Funktion verwenden

In Python ist eine Lambda-Funktion eine unbenannte Funktion, die in einer Codezeile deklariert werden kann. Lambda-Funktionen sind besonders nützlich für die Codekomprimierung, wenn Sie schnell eine einfache Funktion definieren müssen. Betrachten Sie beispielsweise den folgenden Code, der eine Liste von Tupeln basierend auf dem zweiten Element jedes Tupels sortiert:

my_list = [(1, 3), (2, 1), (3, 2)]
def sort_by_second(elem):
    return elem[1]
sorted_list = sorted(my_list, key=sort_by_second)

Mit der Lambda-Funktion können Sie diesen Code in eine Zeile komprimieren:

Die chinesische Übersetzung von

Beispiel

lautet:

Beispiel

my_list = [(1, 3), (2, 1), (3, 2)]
sorted_list = sorted(my_list, key=lambda x: x[1])

Ausgabe

[(2, 1), (3, 2), (1, 3)]

Durch die Verwendung von Lambda-Funktionen können wir Sortierkriterien prägnant und lesbar definieren, ohne Funktionen separat definieren zu müssen.

Vermeiden Sie redundanten Code

Beim Code-Golf ist es wichtig, das Schreiben von redundantem oder sich wiederholendem Code zu vermeiden. Dazu können unnötige Variablen, Schleifen oder bedingte Anweisungen gehören. Betrachten Sie beispielsweise den folgenden Code, der die Anzahl der Vokale in einer Zeichenfolge zählt:

my_string = "Hello, World!"
vowel_count = 0
for char in my_string:
    if char in "aeiouAEIOU":
        vowel_count += 1
print(vowel_count)

Mit der Funktion count() und der Methode str.lower() kann dieser Code in einer Zeile zusammengefasst werden:

Die chinesische Übersetzung von

Beispiel

lautet:

Beispiel

my_string = "Hello, World!"
print(sum(my_string.lower().count(vowel) for vowel in "aeiou"))

Ausgabe

3

Durch die Verwendung der Funktion count() und der Methode str.lower() können wir denselben Vorgang präziser und lesbarer ausführen.

Die chinesische Übersetzung von

Code-Golfbeispiele

lautet:

Code-Golfbeispiele

Um einige der von uns besprochenen Techniken und Strategien zu demonstrieren, schauen wir uns einige Beispiele für Python-Code-Golf an.

Beispiel: FizzBuzz

Das FizzBuzz-Problem ist eine häufige Codierungsherausforderung, bei der Zahlen von 1 bis 100 gedruckt, Vielfache von 3 durch „Fizz“, Vielfache von 5 durch „Buzz“ und Vielfache von 3 durch „Buzz“ durch Ersetzen der Zahl durch „ FizzBuzz". Hier ist eine Lösung für das FizzBuzz-Problem mit herkömmlichen Schleifen und bedingten Methoden:

for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

Mithilfe von Listenverständnissen und Zeichenfolgenverkettung kann dieser Code in einer Zeile zusammengefasst werden:

print('\n'.join("Fizz"*(i%3==0)+"Buzz"*(i%5==0) or str(i) for i in range(1,101)))

Durch die Verwendung von Listenverständnissen und Zeichenfolgenverkettung können wir die Menge an Code, die zur Lösung von FizzBuzz-Problemen erforderlich ist, erheblich reduzieren.

Das Ausgabeprogramm ersetzt Vielfache von 3 durch „Fizz“, Vielfache von 5 durch „Buzz“ und Zahlen, die beide Vielfache von 3 und 5 sind, durch „FizzBuzz“. Alle anderen Zahlen werden unverändert gedruckt.

Fazit

Zusammenfassend ist Code Golf eine beliebte Programmiermethode, bei der es darum geht, Code mit möglichst wenigen Zeichen zu schreiben, um eine Aufgabe zu erledigen. In Python gibt es mehrere Techniken, mit denen Sie die Codegröße reduzieren können, z. B. die Verwendung von Listenverständnissen, Lambda-Funktionen und integrierten Funktionen wie sum() und sorted(). Während Code-Golf eine unterhaltsame und lehrreiche Übung sein kann, sollte die Lesbarkeit und Wartbarkeit Ihres Codes immer oberste Priorität haben, wenn Sie Code für reale Anwendungen schreiben. Auch wenn es verlockend sein mag, den kürzestmöglichen Code zu verwenden, ist es für Sie und andere wichtig, Ihren Code klar und verständlich zu halten.

Das obige ist der detaillierte Inhalt vonCodegolf in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen