ฉันมีรหัสต่อไปนี้:
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]
โดยทั่วไปฉันคำนวณดัชนีใหม่และใช้สิ่งนั้นเพื่อค้นหาองค์ประกอบบางอย่างจากรายการ เพื่อให้แน่ใจว่าดัชนีอยู่ในขอบเขตของรายการฉันต้องเขียนif
คำสั่ง2 คำนี้โดยกระจายเป็น 4 บรรทัด มันค่อนข้างฟุ่มเฟื่อยน่าเกลียดไปหน่อย ... ฉันบอกเลยว่ามันค่อนข้างไม่พีค
มีโซลูชันอื่นที่ง่ายและกะทัดรัดกว่านี้หรือไม่? (และpythonicอื่น ๆ)
ใช่ฉันรู้ว่าสามารถใช้ได้if else
ในบรรทัดเดียว แต่อ่านไม่ออก:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
ฉันยังรู้ว่าฉันล่ามโซ่max()
และmin()
อยู่ด้วยกันได้ มันกะทัดรัดกว่า แต่ฉันรู้สึกว่ามันค่อนข้างคลุมเครือหาจุดบกพร่องได้ยากกว่าถ้าฉันพิมพ์ผิด กล่าวอีกนัยหนึ่งฉันไม่พบว่ามันตรงไปตรงมามากนัก
new_index = max(0, min(new_index, len(mylist)-1))