Mam następujące listy:

elements = ['a', 'b', 'c', 'd','e','f']

I

y = ['c','d']

Chcę kodować:

for i in elements:

    if i in y: do something

    elif the next element after i is in y: do something

Zasadniczo, jeśli i jest 'b' w elements, chcę pętli "zobaczyć", że {x3}} przyjdzie dalej, a nie jestem pewien, jak zrobić to w stanie.

Z góry dziękuję

0
RRR 13 sierpień 2014, 21:24

3 odpowiedzi

Najlepsza odpowiedź

ITERUE Over indeks w pętli zamiast tego:

for index in range(len(elements)):
    if elements[index] in y:
        # do something
    elif index < len(elements) - 1 and elements[index + 1] in y:
        # do something else

Oczywiście możesz to zrobić za pomocą enumerate (chociaż nie lubię mieszania wskaźników i wyliczenia przedmiotów):

for index, element in enumerate(elements):
    if element in y:
        # do something
    elif index < len(elements) - 1 and elements[index + 1] in y:
        # do something else

Zauważ, że oba razy musimy sprawdzić, czy index < len(elements) - 1, ponieważ inaczej elements[index + 1] nie powiedzie się

Edytować

Ponieważ @padraiccunningham wskazuje w komentarzach, możesz również użyć enumerate na elements[:-1] (wszystko oprócz ostatniego elementu), aby sprawdzić indeks sprawdzić niepotrzebne. Uważaj jednak, że pierwsza część if nigdy nie zostanie wprowadzona do ostatniego elementu z tą opcją:

for index, element in enumerate(elements[:-1]):
    if element in y:
        # do something
    elif elements[index + 1] in y:
        # do something else
1
hlt 13 sierpień 2014, 17:54

Zawsze możesz użyć enumerate, aby uzyskać bieżący indeks i. Następnie następnym elementem jest elements[index+1].

for index, i in enumerate(elements[:-1]):

    if i in y: do something

    elif elements[index+1] in y: do something
4
jh314 13 sierpień 2014, 17:32

Poniżej może dać ci pomysł:

for this, next in zip(elements[:-1], elements[1:]):
   print this, next  # do your thing instead
1
NPE 13 sierpień 2014, 17:28