从值列表中查找所有局部极值
Finding all local extrema from a list of values
这是我的代码,我收到“列表索引超出范围”的错误,我试图通过考虑 for 循环之前的第一个和最后一个值来解决这个问题,但是我不知道如何制作for 循环排除第一个和最后一个对象,有什么想法吗?
def minmax(List):
mins=[]
maxs=[]
if List[0]>List[1]: maxs.append(List[0])
if List[0]<List[1]: mins.append(List[0])
if List[-1]>List[-2]: maxs.append(List[-1])
if List[0]<List[1]: mins.append(List[-1])
for i in List[1:-1]:
if List[i] < List[i-1] and List[i] < List[i+1]:
mins.append(List[i])
elif List[i] > List[i-1] and i> List[i+1]:
maxs.append(List[i])
return "mins",mins,"maxs",maxs
nums=[5,0,5,0,5]
minmax(nums)
你的错误在于你在 for 循环中访问元素的方式
for i in List[1:-1]:
if List[i] < List[i-1] and List[i] < List[i+1]:
mins.append(List[i])
elif List[i] > List[i-1] and i> List[i+1]:
maxs.append(List[i])
的确,i
这里是List
的一个元素,不是这个元素的索引,所以List[i]
没有任何意义,List[i+1]
和List[i-1]
.
一个解决方法是使用 enumerate 来跟踪列表的当前值及其索引:
for n, i in enumerate(List[1:-1]):
if List[n] < List[n-1] and List[n] < List[n+1]:
mins.append(List[n])
elif List[n] > List[n-1] and i> List[n+1]:
maxs.append(List[n])
我强烈建议您使用调试器来了解此行为。
这是我的代码,我收到“列表索引超出范围”的错误,我试图通过考虑 for 循环之前的第一个和最后一个值来解决这个问题,但是我不知道如何制作for 循环排除第一个和最后一个对象,有什么想法吗?
def minmax(List):
mins=[]
maxs=[]
if List[0]>List[1]: maxs.append(List[0])
if List[0]<List[1]: mins.append(List[0])
if List[-1]>List[-2]: maxs.append(List[-1])
if List[0]<List[1]: mins.append(List[-1])
for i in List[1:-1]:
if List[i] < List[i-1] and List[i] < List[i+1]:
mins.append(List[i])
elif List[i] > List[i-1] and i> List[i+1]:
maxs.append(List[i])
return "mins",mins,"maxs",maxs
nums=[5,0,5,0,5]
minmax(nums)
你的错误在于你在 for 循环中访问元素的方式
for i in List[1:-1]:
if List[i] < List[i-1] and List[i] < List[i+1]:
mins.append(List[i])
elif List[i] > List[i-1] and i> List[i+1]:
maxs.append(List[i])
的确,i
这里是List
的一个元素,不是这个元素的索引,所以List[i]
没有任何意义,List[i+1]
和List[i-1]
.
一个解决方法是使用 enumerate 来跟踪列表的当前值及其索引:
for n, i in enumerate(List[1:-1]):
if List[n] < List[n-1] and List[n] < List[n+1]:
mins.append(List[n])
elif List[n] > List[n-1] and i> List[n+1]:
maxs.append(List[n])
我强烈建议您使用调试器来了解此行为。