我有一個值列表,我需要給定任意任意起始索引,如果起始索引處的值爲零,則找到最接近的非零值。 ..從列表中獲得最接近的非零值的最佳方法
這是我有:
def getNearestNonZero(start_index):
mylist = [4,2,6,7,3,0,0,9,4,2,5,8,1,7]
val = mylist[start_index]
if val == 0:
loop_length = 0
after = mylist[start_index+1:]
before = mylist[:start_index]
before = before[::-1]
print(before, after)
if len(before) >= len(after):
loop_length = len(before)
else:
loop_length = len(after)
for i in range(loop_length):
if i < len(before):
before_val = before[i]
if i < len(after):
after_val = after[i]
if before_val > 0:
return before_val
if after_val > 0:
return after_val
return val
result = getNearestNonZero(6)
print(result)
result = getNearestNonZero(5)
print(result)
[0,3,7,6,2,4] [9,4,2,5,8,1,7]
[3,7,6, 2,4] [0,9,4,2,5,8,1,7]
我做什麼,是我首先檢查以查看是否在start_index
值爲>如果是,很好,請歸還。但是,如果該值是零,我們需要找到最接近的非零,與之前的偏愛,而不是之後......
要做到這一點,我分裂mylist
成兩個單獨的列表,before
和after
。如果我的起始索引是6,before
現在看起來像:[4,2,6,7,3,0]
,之後將如下所示:[9,4,2,5,8,1,7]
。
因爲我需要最接近的值到start_index
,我扭轉我before
名單:before = before[::-1]
然後我得到的最長的兩個(before
和after
)的長度。
然後我循環並檢查兩個列表中每個索引的值。第一個具有> 0的值被返回並且我的工作完成。
但是,這感覺非常笨重,好像它可以以更清潔的方式完成。
有沒有人有任何建議?給定一個起始索引,在列表中找到最接近的非零值的更快/更清潔/ pythonic方式是什麼?
我投票在這裏結束這個問題,因爲它**已經轉載的代碼審查:https://codereview.stackexchange.com/questions/172113/best-way-to-get-nearest非零值從列表** –