簡體   English   中英

抵消迭代器

[英]offsetting iterator

我有這個:

d = {"date": tuple(date),"open":tuple(open),"close":tuple(close)}

comp1 = zip(d['open'],d['close'])

for i in comp1:   
    if i[0]<i[1]:
        print "bar up"

    if i[0]>i[1]:
        print "bar down"

一切都很好,它告訴我一個小節是向上還是向下,現在我想“移動”我的迭代(例如,一次迭代),但是我不知道它的語法。 邏輯將是:

“如果上一個條向上,則打印“是”,如果當前條也向上”。

是否有意義 ?

干杯,

如果您使用的是zip迭代器,為什么不將其帶入新的高度?

comp1 = zip(d['open'],d['close'],d['open'][1:],d['close'][1:])

只要元組的長度大於1,就可以在其中擁有它。現在,您不僅可以遍歷元組,還可以遍歷每個元組的下一個元素。

up = lambda a, b: a < b
for prev, b in zip(comp1, comp1[1:]):
    if up(*prev) and up(*b):
       print "yes"

說明

  • up = lambda a, b: a < b創建兩個參數的函數。 它等效於operator.lt
  • for prev, b in zip(comp1, comp1[1:]):使用序列拆包(與x, y = "xy" ), zip()函數,列表切片
  • if up(*prev) and up(*b):函數調用使用*expression語法。

您可能需要對循環執行一些簡單的邏輯,即可實現所需的邏輯。 大致了解一下以下內容

PreviousWasUp = False
for i in comp1:
    ...
    if i[0] > i[1]:
        if PreviousWasUp:
           print "bar up"
        PreviousWasUp = True
    else:
        PreviousWasUp = False

您可以將當前執行的迭代轉換為列表理解,然后對獲得的列表進行迭代:

bars = [i[0]<i[1] for i in comp1]

for b in range(1,len(bars)):
    if bars[b] and bars[b-1]:
        print "yes"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM