2017-05-23 36 views
5

wiem, że praca funkcja indeksu tak:Jak przenieść offset „index” metody „listy”

list = ['dog','cat','pizza','trump', 'computer', 'trump'] 
print list.index('trump') 

wyjście będzie 3. ale teraz chcę go do druku drugi łańcuch "trump", , który pojawia się po 2 obiektach. ale jeśli zrobię to samo polecenie:

print list.index('trump') 

ponownie wydrukuje 3 - pierwszy atut, jaki zobaczy. jak przesunąć "offset" funkcji indeksu, aby wykryła drugą wartość atutu w indeksie 5? dzięki wam!

+0

szukasz wydrukować wszystkie indeksy, gdzie występuje ciąg? – jmugz3

+0

Możesz znaleźć przydatne https://stackoverflow.com/questions/6294179/how-to-find-all-occurrences-of-an-element-in-a-list – carthurs

+0

lub ostatnie? – kuro

Odpowiedz

1

utwórz skróconą wersję listy.

list=['dog','cat','pizza','trump', 'computer', 'trump'] 
print list.index('trump') 
list = list[list.index('trump')+1:] 
print list.index('trump') 
5

list.index zajmuje 2. startowy argument:

>>> lst = ['dog','cat','pizza','trump', 'computer', 'trump'] 
>>> lst.index('trump') # 1st index 
3 
>>> lst.index('trump',4) # 2nd index 
5 
>>> lst.index('trump',lst.index('trump')+1) # 2nd index 
5 

Albo jeśli chcesz wszystkie indeksy, używanie wyrażeń listowych:

>>> [idx for idx,item in enumerate(lst) if item == 'trump'] 
[3, 5] 
2

Jeśli chcesz listę wszystkich wskaźników dla na liście możesz zrobić coś takiego:

indices = [i for i, x in enumerate(list) if x == "key"] 
5

Wystarczy pamiętać, pierwszy indeks, gdzie pojawia się napis, i zdać dodatkowy parametr do index po raz drugi:

l = ['dog','cat','pizza','trump', 'computer', 'trump'] 
i = l.index("trump") 
print(i) 
print(l.index("trump",i+1)) 

uzyskać:

3 
5 

z doc inline, można przekazać opcjonalny rozpocząć wartość & przystanek:

index (...)

L.index (wartość, [start, [stop]]) -> liczba całkowita - zwraca pierwszy indeks wartości. Powoduje zanik wartościError, jeśli wartość nie jest obecna.

(w ogólnym przypadku trzeba chronić swój apel do index przez try/except ValueError bloku, w przypadku, gdy wartość nie znajduje się na liście i działać odpowiednio)

Zauważ, że start może być ujemna. Jeśli jest ujemny, indeks jest obliczany z końca listy.

1
l = ['dog','cat','pizza','trump', 'computer', 'trump'] 
i = [n for n, item in enumerate(l) if item == 'trump'] #find all indices 

# print the result 
for n in i: 
    print n, l[n] 

3 trump 
5 trump 
0

Spróbuj tego ... działa jak urok.

Faktycznie w swoim problemie iteracji wykonuje się tylko raz, nawet w pętli for to przyzwyczajenie praca (nie działa dla mnie nawet po iter i next() używany) więc próbowałem z while wtedy zdaję sobie sprawę, że jest to gra iteracji więc umieścić while w try z while 1: na początek iteracją 1, a metoda indeksu wykonuje wyszukiwanie liniowe i zatrzymuje się przy pierwszym pasującym elemencie. Jeśli nie zostanie znaleziony pasujący element, zostanie zgłoszony wyjątek od ValueError.

KOD

list = ['dog','cat','pizza','trump', 'computer', 'trump'] 
value = "trump" 
i = -1 
try: 
    while 1: # Start with Iteration 1 never 0 
     i = list.index(value, i+1) 
     print(value,"at", i) 
except ValueError: # No matching item is found. 
    pass 

WYJŚCIE

trump at 3 
trump at 5 
+0

Znaleziono inny najprostszy sposób na uzyskanie wspólnego ciągu na liście #CODE ' dla idx, val w wyliczeniu (l): \t jeśli val == 'Trump': \t \t print (idx, val) ' #OUTPUT ' 3 atutem 5 trump' –