在列表

时间:2016-07-21 15:29:04

标签: python loops

我想迭代列表并找到最新的"连续值"。

这是什么意思,好吧:

如果我有一个列表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"在标签中。

3 个答案:

答案 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