比较两个列表时输出不正确

2024-06-25 06:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着比较两个清单来产生买入/卖出信号。第一个列表是价格列表,而第二个列表是这些价格的简单移动平均值。你知道吗

result = [590.0, 600.0, 590.0, 580.0, 570.0, 560.0, 570.0]
avrg = [580.0, 590.0, 593.33, 590.0, 580.0, 570.0, 566.67]
signal = ''

for prices in range(len(result)):
    for averages in range(len(avrg)):
        if result[prices] > avrg[averages]:
            signal = 'BUY'
        elif result[prices] < avrg[averages]:
            signal = 'SELL'
    lst.append(signal)

输出为

['BUY', 'BUY', 'BUY', 'BUY', 'BUY', 'SELL', 'BUY']

输出应该是

['BUY', 'BUY', 'SELL', 'SELL', 'SELL', 'SELL', 'BUY']

Tags: in列表forsignallen信号range价格
2条回答
result = [590.0, 600.0, 590.0, 580.0, 570.0, 560.0, 570.0]
avrg = [580.0, 590.0, 593.33, 590.0, 580.0, 570.0, 566.67]
signal = []
for i in range(len(result)):
  if (result[i] > avrg[i]):
    signal.append('BUY')
  else:
    signal.append('SELL')

给予

>>> signal
['BUY', 'BUY', 'SELL', 'SELL', 'SELL', 'SELL', 'BUY']

不是在resultavrg的对应元素上循环,而是在每个组合上循环。例如,如果将print(result[prices], avrg[averages])粘贴到循环中,您将看到

590.0 580.0
590.0 590.0
590.0 593.33
590.0 590.0
590.0 580.0
590.0 570.0
590.0 566.67
600.0 580.0
600.0 590.0
600.0 593.33
[.. etc.]

所以附加的signal实际上是比较result[prices]avrg的最后一个元素的结果。你知道吗

我认为您真正想做的是比较相应的术语,我们可以使用zip来进行比较。此外,在Python中,我们可以直接循环列表,而不需要通过索引访问它们。例如:

>>> list(zip(result, avrg))
[(590.0, 580.0), (600.0, 590.0), (590.0, 593.33), (580.0, 590.0), 
(570.0, 580.0), (560.0, 570.0), (570.0, 566.67)]

这样我们就可以写作了

lst = []
for price, average in zip(result, avrg):
    if price > average:
        signal = 'BUY'
    else:
        signal = 'SELL'
    lst.append(signal)

(为了简单起见,忽略price == average案例)

产生

>>> lst
['BUY', 'BUY', 'SELL', 'SELL', 'SELL', 'SELL', 'BUY']

在这里,我们甚至可以使用列表理解而不是循环:

>>> ['BUY' if price > average else 'SELL' for price, average in zip(result, avrg)]
['BUY', 'BUY', 'SELL', 'SELL', 'SELL', 'SELL', 'BUY']

但是,逻辑越复杂,只需编写一个clear for循环就越好。你知道吗

在任何情况下,我认为基本的问题是,你做了一个完整的所有价格对所有平均值的比较,并采取最后一个值时,你真的想比较相应的元素。你知道吗

[注:我刚注意到一些奇怪的事情。当价格高于平均水平时买东西不是不对吗?你不应该在低于平均水平时买进,在高于平均水平时卖出吗?]你知道吗

相关问题 更多 >