[英]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.