2016-07-21 9 views
1

Ich möchte über eine Liste iterieren und finden Sie die neuesten "aufeinander folgenden Wert".erhalten spezifischen Index bei der Verwendung izip über Liste

Was bedeutet, dass auch: 420-423, Indexnummer:

Wenn ich eine Liste priceValue = [423, 399, 390, 400, 430, 420, 423], meine letzte Mal in Folge Wert haben die 2 letzten Indizes sein 5 und 6

Ich möchte iterieren und den Index an den richtigen Ort

in diesem Moment benutze ich zu bekommen:

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) 

Aber mein Problem ist, dass es nur den Index "0" und "5" druckt, da der Wert 423 bei Index 0 gefunden wird.

Wie bekomme ich den richtigen Index?

HINWEIS: Ich kann "izip" nicht in Tags taggen.

Antwort

0

Verwenden enumerate den Index mit ursprünglichen Elementen ergibt:

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

danke, aber wie bekomme ich dann das richtige x und y? Es beklagt sich, wenn ich Ihre Lösung –

+0

@NutshellProgrammer, '[(i, i + 1, x, y) für i, (x, y) in enumeriere (itertools.izip (xs, xs [1:])) wenn y > x] 'oder' [(x, y) für i, (x, y) in enumerate (itertools.izip (xs, xs [1:])) wenn y> x] 'abhängig von Ihrem Bedarf. – falsetru

+0

wie folgt: [i für i, (x, y) in enumerate (itertools.izip (xs, xs [1:])) wenn y> x] drucken x, y wenn y> x: #print x , y timeIndexY = priceValue.index (y) drucken priceValue.index (y), priceValue.index (x) –

0
[(i, i+1) for i in range(len(priceValue)-1) if priceValue[i]<priceValue[i+1]] 

Output:

[(2, 3), (3, 4), (5, 6)] 

Oder mehr ganz:

res=[({i:priceValue[i], i+1:priceValue[i+1]}) for i in range(len(priceValue)-1) if priceValue[i]<priceValue[i+1]] 

Ausgang:

[{2: 390, 3: 400}, {3: 400, 4: 430}, {5: 420, 6: 423}] 
0

Wenn Sie Geist for-Schleifen zu vermeiden nicht, können Sie auch das letzte Mal in Folge Wert durch die Berechnung Unterschiede:

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

Der gewünschte Index ist der letzte positive Index:

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