0
我需要定义其传递到一个可迭代的参数峰函数,通过计算此迭代器,函数应该返回峰的列表。我可以创建的唯一数据结构是列表正在返回;不使用中间数据结构来帮助计算:例如,我无法用迭代中的所有值创建列表。请注意,我也不能假定参数是可索引的,也不能为它计算len:它只是可迭代的。
例如:
peaks([0,1,-1,3,8,4,3,5,4,3,8]) returns [1, 8, 5].
该结果意味着值1,8,和5是严格大于紧接之前和之后他们的值更大。
def peaks(iterable):
l=[]
i=iter(iterable)
v=next(i)
try:
while True:
if v>next(iter(iterable)):
l.append(v)
v=next(i)
except StopIteration:
pass
return l
调用这些应该给我:
peaks([0,1,-1,3,8,4,3,5,4,3,8]) --> [1,8,5]
peaks([5,2,4,9,6,1,3,8,0,7]) -->[9,8]
但我得到:
peaks([0,1,-1,3,8,4,3,5,4,3,8]) --> [1, 3, 8, 4, 3, 5, 4, 3, 8]
peaks([5,2,4,9,6,1,3,8,0,7]) --> [9, 6, 8, 7]
请帮我解决这个问题,我花了这么多时间在它和我做没有进展。而且,我不知道如何编写if语句来检查紧接前后的值。任何帮助都会很棒!由于我的英语不好,实际的代码会非常感激。
感谢您的帮助! ^^ – Saoish 2014-11-03 06:55:10