2016-07-21 2 views
1

Я хочу перебрать список и найти последнее «последовательное значение».получить конкретный индекс при использовании izip над списком

Что это значит, хорошо:

Если у меня есть список priceValue = [423, 399, 390, 400, 430, 420, 423], мой последний раз подряд значение будут 2 последних индексов: 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

Использование 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 
+0

спасибо, но тогда как я получу правильные x и y? он жалуется, когда я копирую решение –

+0

@NutshellProgrammer, '[(i, i + 1, x, y) для i, (x, y) в перечислении (itertools.izip (xs, xs [1:])), если y > x] 'или' [(x, y) для i, (x, y) в перечислении (itertools.izip (xs, xs [1:])), если y> x] 'в зависимости от вашей потребности. – falsetru

+0

следующим образом: [i для i, (x, y) в перечислении (itsertools.izip (xs, xs [1:])), если y> x] print x, y , если y> x: #print x , y timeIndexY = priceValue.index (y) print priceValue.index (y), priceValue.index (x) –

0
[(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: 390, 3: 400}, {3: 400, 4: 430}, {5: 420, 6: 423}] 
0

Если вы не возражаете избегая для петель, вы также можете найти последний раз подряд значение, вычисляя различия:

import numpy as np 
x = [423, 399, 390, 400, 430, 420, 423] 
d = np.diff(x) 

Индекс, который вы хотите, - последний положительный индекс:

np.where(d > 0)[0][-1] 
>>> 5