2013-12-18 25 views
-1

我一直在尝试偏移内部for语句,所以我可以评估数据序列中的更改。想知道我在这里做错了什么。也许对于语句不是最好的方法,所以尝试使用if语句中的next。这将被用于大型数据集。偏移内部为陈述

n = 1 
data = [10,9,8,7,6,5,6,7,8,7,6] 

def test(data,n): 
    highs = [] 
    for d in data: 
     if d > d[-n]: 
      highs.extend([d]) 
    return highs 


def test1(data,n): 
    highs = [] 
    if data[n+1] > data[n]: 
     highs.extend([data[n]]) 
     next 
    else: 
     next 
    return highs 

任何人都可以帮助什么在这里失踪?谢谢

+0

你期待什么输出的指数? – Ffisegydd

+2

你认为'next'有什么用? – shx2

+2

'if d> d [-n]:'this should be'if d> data [n]:'?在'test()' –

回答

0

您对d[-n]data[n]的含义并不完全清楚。但我猜你是指列表中的前一个值(或当前位置 - n返回)。

下面是找到大于前一个元素的问题的简单解决方案。只需将该先前的值保存在变量中即可。

prev = data[0] 
highs = [prev] # should the 1st one be one the list? 
for d in data: 
    if d > prev: 
     highs.append(d) # simpler than extend([d]) 
    prev = d # update prev  
highs 
# [10, 6, 7, 8] 

另一种方法是步骤指数

for i in range(n, len(data)): 
    if data[i]>data[i-n] 
     ... 

或者使用enumerate获得

for i, d in enumerate(data): 
    j = i - n 
    if j>=0: 
     if d > data[j]: 
      .... 
0

这听起来像你想要一个移动你的数据的滑动窗口,所以你可以比较每个元素之前的一个n?

你可以使用这个collections.deque(http://docs.python.org/2/library/collections.html#deque-objects):

from itertools import islice 
from collections import deque 
def windowed(items, size): 
    items = iter(items) 
    window = deque(islice(items, size), maxlen=size) 
    while True: 
     yield window 
     window.append(items.next()) 

(使用MAXLEN意味着追加推动最左边的元素了固定大小的双端队列)

然后你可以使用它来查看窗口中的第一项和最后一项:

for window in windowed(data, n): 
    # do something with window[0] and window[-1] 

访问每个末端的deque是快 - O(1)。