在for循环中引用列表的前一个元素?

时间:2018-01-20 07:12:08

标签: python list loops moving-average

我试图通过实现一个非常简单的移动平均交叉来学习python。

以下是我的代码:

public class Employee {
int id;
String name;
byte[] imgg;
public Employee() {
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public byte[] getImgg() {
    return imgg;
}

public void setImgg(byte[] imgg) {
    this.imgg = imgg;
}
public Employee(int id, String name, byte[] imgg) {
    this.id = id;
    this.name = name;
    this.imgg = imgg;
}

我的逻辑是,如果列表中的前一个元素为0且当前元素为1,则程序应该以相应的价格变长。这只是为了防止它已经很长时间了。

然而,当我运行它时,它不会在long_position中附加任何内容。

任何人都可以指导我可能出现的问题吗?任何关于代码的评论也将非常感谢!

以下基本上是我尝试做的事情:

px = [] ## list with prices
ma = [] ## list with corresponding 5-d MA 
position = []

for n, m in zip(px, ma):
    if n > m:
        position.append("1") ## signal for long position
    elif m > n:
        position.append("0") ## signal to close position

long_position = []

for x, z in zip(px, position):
    if (px.index(x) > 0): 
        if position[px.index(x)-1] == 0 and position[px.index(x)] == 1: <-- PROBLEM HERE?
            long_position.append(x)

print(long_position)

1 个答案:

答案 0 :(得分:0)

已解决

能够使用enumerateindex解决问题。还调整了我生成信号的方式。解决了下面的循环:

for index,(x,z) in enumerate(zip(px,position)):
    if index > 0:
        if ((position[index]) + (position[index-1])) == '10':    # for long
            long_position.append(x*-1)
        elif ((position[index]) + (position[index-1])) == '01':  # for close
            close_position.append(x)
        else:
            pass

谢谢你的帮助,伙计们!