suchen

Codegolf in Python

Aug 19, 2023 pm 11:25 PM
深度优先搜索(dfs)动态规划(dp)列表推导(list comprehension)

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. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Wie wirkt sich die Auswahl zwischen Listen und Arrays auf die Gesamtleistung einer Python -Anwendung aus, die sich mit großen Datensätzen befasst?Wie wirkt sich die Auswahl zwischen Listen und Arrays auf die Gesamtleistung einer Python -Anwendung aus, die sich mit großen Datensätzen befasst?May 03, 2025 am 12:11 AM

ForHandlinglargedatasetsinpython, Usenumpyarraysforbetterperformance.1) Numpyarraysarememory-Effiction und FasterFornumericaloperations.2) meidenunnötiger Anbieter.3) HebelVectorisationFecedTimeComplexity.4) ManagemememoryusageSageWithEffizienceDeffictureWitheseffizienz

Erklären Sie, wie das Speicher für Listen gegenüber Arrays in Python zugewiesen wird.Erklären Sie, wie das Speicher für Listen gegenüber Arrays in Python zugewiesen wird.May 03, 2025 am 12:10 AM

Inpython, listEUSUutsynamicMemoryAllocationWithover-Accocation, whilenumpyarraysalcodeFixedMemory.1) ListSallocatemoremoryThanneded intellig, vereitelte, dass die sterbliche Größe von Zeitpunkte, OfferingPredictableSageStoageStloseflexeflexibilität.

Wie geben Sie den Datentyp der Elemente in einem Python -Array an?Wie geben Sie den Datentyp der Elemente in einem Python -Array an?May 03, 2025 am 12:06 AM

Inpython, youcansspecthedatatypeyFelemeremodelerernspant.1) Usenpynernrump.1) Usenpynerp.dloatp.Ploatm64, Formor -Präzise -Preciscontrolatatypen.

Was ist Numpy und warum ist es wichtig für das numerische Computing in Python?Was ist Numpy und warum ist es wichtig für das numerische Computing in Python?May 03, 2025 am 12:03 AM

NumpyisessentialfornumericalComputingInpythonduetoitsSpeed, GedächtnisEffizienz und kompetentiertemaMatematical-Funktionen.1) ITSFACTBECAUSPERFORMATIONSOPERATIONS.2) NumpyarraysSaremoremory-Effecthonpythonlists.3) iTofferSAgyarraysAremoremory-Effizieren

Diskutieren Sie das Konzept der 'zusammenhängenden Speicherzuweisung' und seine Bedeutung für Arrays.Diskutieren Sie das Konzept der 'zusammenhängenden Speicherzuweisung' und seine Bedeutung für Arrays.May 03, 2025 am 12:01 AM

ContInuuousMemoryAllocationScrucialforAraysBecauseAltoLowsFofficy und Fastelement Access.1) iTenablesconstantTimeAccess, O (1), Duetodirectaddresscalculation.2) itimProvesefficienceByallowing -MultipleTeLementFetchesperCacheline.3) Es wird gestellt

Wie schneiden Sie eine Python -Liste?Wie schneiden Sie eine Python -Liste?May 02, 2025 am 12:14 AM

SlicingPapythonListisDoneUsingthesyntaxlist [Start: Stop: Stufe] .here'Showitworks: 1) StartIndexoFtheFirstelementtoinclude.2) stopiStheIndexoFtheFirstelementtoexclude.3) StepisTheincrementBetweenelesfulFulForForforexcractioningPorporionsporporionsPorporionsporporesporsporsporsporsporsporsporsporsporionsporsPorsPorsPorsPorsporsporsporsporsporsporsAntionsporsporesporesporesporsPorsPorsporsPorsPorsporsporspors,

Was sind einige gängige Operationen, die an Numpy -Arrays ausgeführt werden können?Was sind einige gängige Operationen, die an Numpy -Arrays ausgeführt werden können?May 02, 2025 am 12:09 AM

Numpyallowsforvariousoperationssonarrays: 1) BasicarithmeticliKeaddition, Subtraktion, Multiplikation und Division; 2) AdvancedoperationssuchasmatrixMultiplication;

Wie werden Arrays in der Datenanalyse mit Python verwendet?Wie werden Arrays in der Datenanalyse mit Python verwendet?May 02, 2025 am 12:09 AM

Arraysinpython, insbesondere ThroughNumpyandpandas, areessentialfordataanalyse, öfterspeedandeffizienz.1) numpyarraysenableAnalysHandlingoflargedatasets und CompompexoperationslikemovingAverages.2) Pandasextendsnumpy'ScapaBilitiesWithDaTataforsForstruc

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor