Ich werde von Zeit zu Zeit die Techniken aktualisieren, die ich in der kürzlich auf der Website codefights begonnenen Showcodierung gelernt habe.
Kurze Codierungsüberlegung
Der Vergleichsoperator <= kann grundsätzlich weggelassen und um ** 1 Zeichen ** reduziert werden
# long
a <= 3
# short (Wenn a eine ganze Zahl ist)
a < 4
Entspricht -1 bzw. +1 Da es jedoch eine höhere Priorität als der Multiplikationsoperator hat, kann es durch Weglassen der Klammern um ** 2 Zeichen ** reduziert werden.
# long
b * (a - 1) * 5
# short
b * ~-a * 5
: (Doppelpunkt) und die linke Seite der Zuordnung können weggelassen werden
# long
if a < b:
c = 4
else:
c = 2
# short
c = 4 if a < b else 2
(Nur Python2)
Verwenden Sie \ \
, um in einen String zu konvertieren
# long
str(1600)
# short
`1600`
Wenn Sie einen logischen Wert genau zurückgeben möchten, verwenden Sie eine logische Operation ohne True oder False.
# long
b = False
# short
b = 0 > 1
# long
return True
# short
return 1 > 0
import as Kürzen Sie auch das zu importierende Modul
# long
import math
math.sqrt(10)
# short
import math as m
m.sqrt(10)
Verbinden Sie mehrere Zeichenfolgenvergleiche und führen Sie sie gleichzeitig durch
#Sowohl das erste als auch das letzte Zeichen stimmen überein
# long
a[0] == b[0] and a[-1] == b[-1]
# short
a[0] + a[-1] == b[0] + b[-1]
#A und B,c und d haben die gleiche Länge(Oder einzigartig, auch wenn es kombiniert wird)Wenn
# long
a == b and c == d
# short
a + c == b + d
Die Codefights Challenge testet Ihre Antwort in Form einer Funktion
lambda Wenn möglich, können Sie ** 4 Zeichen ** reduzieren, indem Sie die Funktion in einen Lambda-Ausdruck konvertieren.
# long
def Hoge(n):
return n * 2
# short
Hoge = lambda n: n * 2
Argumentnamen können ein Zeichen sein, da sie in vielen Fällen nicht explizit aufgerufen werden.
# long
def Hoge(arg):
return arg ** arg
# short
def Hoge(a):
return a ** a
Bei Verwendung von rekursiv einer Ein-Buchstaben-Variablen zuweisen
# long
def LongLongHoge(a):
if a < 3:
return a
return LongLongHoge(a - 2) * LongLongHoge(a - 1)
# short
def LongLongHoge(a):
if a < 3:
return a
return t(a - 2) * t(a - 1)
t = LongLongHoge
Noch kürzer mit Lambda und gleichzeitiger Zuordnung
# short
LongLongHoge = t = lambda a: a if a < 3 else t(a - 2) * t(a - 1)
# long
t = a % 3
if t == 0:
a = a * 2
elif t == 1:
a = 0
elif t == 2:
a = t * 2
# short
a = [a * 2, 0, (a % 3) * 2][a % 3]
# short
t = a % 3
a = [a * 2, 0, t * 2][t]
(a <b) gibt True und False zurück, kann jedoch für die Arithmetik als 1 bzw. 0 verwendet werden Es gibt viele Muster, die bei Verwendung weggelassen werden können
# long
c = 4 if a < b else 2
# short
c = 2 + 2 * (a < b)
# long
myhex = lambda n: '%X' % n
# short
myhex = '{:X}'.format
myhex = '%X'.__mod__
Recommended Posts