我想迭代列表并找到最新的"连续值"。
这是什么意思,好吧:
如果我有一个列表priceValue = [423, 399, 390, 400, 430, 420, 423]
,我最近的连续值将是最后两个索引:420到423,索引号:5和6。
我想迭代并在正确位置
获取索引此时我使用:
for x, y in itertools.izip(priceValue, priceValue[1:]):
print x, y
if y > x:
#print x, y
print priceValue.index(y), priceValue.index(x)
但我的问题是它只会打印索引" 0"和" 5"因为值423在索引0处找到。
我如何获得正确的索引?
注意:我无法标记" izip"在标签中。
答案 0 :(得分:0)
使用enumerate
产生索引与原始项目:
>>> for i, x in enumerate(['a', 'b', 'c']):
... print i, x # i: index, x: item
...
0 a
1 b
2 c
>>> import itertools
>>>
>>> xs = [423, 399, 390, 400, 430, 420, 423]
>>> [i for i, (x, y) in enumerate(itertools.izip(xs, xs[1:])) if y > x]
[2, 3, 5]
>>> [(i, i+1) for i, (x, y) in enumerate(itertools.izip(xs, xs[1:])) if y > x]
[(2, 3), (3, 4), (5, 6)]
for i, (x, y) in enumerate(itertools.izip(xs, xs[1:])):
if y > x:
print i, i + 1, x, y
# Prints
# 2 3 390 400
# 3 4 400 430
# 5 6 420 423
答案 1 :(得分:0)
@Override
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder)
{
super.onViewAttachedToWindow(holder);
if(holder instanceof MyHolder)
{
dostuff((MyHolder)holder);
}
}
private void dostuff(QACommentViewHolder holder)
{
int baseline = holder.outerTextView.getBaseline();
}
输出:
[(i, i+1) for i in range(len(priceValue)-1) if priceValue[i]<priceValue[i+1]]
或者更确切地说:
[(2, 3), (3, 4), (5, 6)]
输出:
res=[({i:priceValue[i], i+1:priceValue[i+1]}) for i in range(len(priceValue)-1) if priceValue[i]<priceValue[i+1]]
答案 2 :(得分:0)
如果你不介意避免循环,你也可以通过计算差异来找到最后一个连续值:
import numpy as np
x = [423, 399, 390, 400, 430, 420, 423]
d = np.diff(x)
您想要的索引是最后一个正索引:
np.where(d > 0)[0][-1]
>>> 5