我有这个:
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"
这一切都很好,它告诉我一个条是上升还是下降,现在我想“转移”我的迭代(例如一个),但我不知道它的语法。逻辑是:
“如果PREVIOUS栏已经打开那么打印”是“如果CURRENT栏也是UP”。
有意义吗?
欢呼声,
答案 0 :(得分:2)
如果你正在使用zip迭代器,为什么不把它带到一个新的水平?
comp1 = zip(d['open'],d['close'],d['open'][1:],d['close'][1:])
只要元组的长度大于1,就可以得到它。现在你不仅可以迭代元组,还可以迭代每个元组的下一个元素。
答案 1 :(得分:2)
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()函数,列表slicing相同。if up(*prev) and up(*b):
使用function calls的*expression
语法。答案 2 :(得分:1)
您可能需要在循环中使用一些简单的逻辑,从而实现您所需的功能。请参阅以下内容以获得一个粗略的想法
PreviousWasUp = False
for i in comp1:
...
if i[0] > i[1]:
if PreviousWasUp:
print "bar up"
PreviousWasUp = True
else:
PreviousWasUp = False
答案 3 :(得分:0)
您可以将当前进行的迭代转换为列表推导,然后迭代获得的列表:
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"