Takip koduna sahibim:
new_index = index + offset
if new_index < 0:
new_index = 0
if new_index >= len(mylist):
new_index = len(mylist) - 1
return mylist[new_index]
Temel olarak, yeni bir indeks hesaplıyorum ve bunu bir listeden bir eleman bulmak için kullanıyorum. Dizinin listenin sınırları içinde olduğundan emin olmak için, bu 2 if
ifadeyi 4 satıra yayılmış olarak yazmam gerekiyordu. Bu oldukça ayrıntılı, biraz çirkin ... Söyleyeyim, bu oldukça pitonik değil .
Daha basit ve daha kompakt başka bir çözüm var mı? (ve daha fazla pitonik )
Evet, if else
tek satırda kullanabileceğimi biliyorum ama okunabilir değil:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
Ben de zincirini yapabileceğini biliyorum max()
ve min()
birlikte. Daha kompakt, ancak biraz belirsiz olduğunu hissediyorum, yanlış yazarsam hataları bulmanın daha zor olduğunu düşünüyorum. Başka bir deyişle, bunu çok basit bulmuyorum.
new_index = max(0, min(new_index, len(mylist)-1))