Wpis z mikrobloga

w jaki sposób mogę sprawić, żeby w pętli for po spełnieniu jakiegoś warunku pętla startowała od początku? powiedzmy, że mam for i in lst coś tam i jeżeli i będzie się równać 5 to program ma wywalić tę wartość z listy i zacząć iterować od początku?
#python
  • 19
  • Odpowiedz
@Oake: dlaczego chcesz robić for?
while
iterujesz przez wskaźnik do wyrażenia na lst
zwiększasz ten wskaznik o 1
a w razie czego ( jeżeli i będzie się równać 5) cofasz na 0
  • Odpowiedz
Możesz obudować to w funkcje i wywoływać rekurencyjnie, albo zamknąć te pętle for w pętli while i operować zmienna typu restart=True
  • Odpowiedz
@Torres99: da się to zrobić tylko pytanie - jak tak będzie leciał po elementach listy i coś spowoduje że wraca na zero - to czy to się nie zapętli na wieki? no bo cały czas będzie wpadać na ten twój warunek że coś tam równa się 5 więc wracaj od początku
  • Odpowiedz
lst = list(range(10))
i = 0
while (i < len(lst)):
_ print(lst[i])
_ i+=1
_ # jak coś się dzieje to i = 0
tu jest moim zdaniem zapętlenie na wieki
  • Odpowiedz
via Wykop Mobilny (Android)
  • 1
@Oake: a możesz opisać co chcesz osiągnąć?
takie działanie brzmi co najmniej podejrzanie i pewnie można to zrobić prościej
  • Odpowiedz
via Wykop Mobilny (Android)
  • 1
Jeżeli chodzi o usunięcie elementów z listy to wystarczy zwykły filter lub list comprehension
  • Odpowiedz
powiedzmy, że mam for i in lst coś tam i jeżeli i będzie się równać 5 to program ma wywalić tę wartość z listy i zacząć iterować od początku?


@Oake: Twój pomysł tutaj wygląda nieco dziwnie. Jeśli pętla ma sprawdzać wartość elementu to nie ma powodu do powracania do początku. Elementy, które spełniały odpowiedni warunek będą go spełniać dalej.
Przykładowo jeśli chcesz wyrzucić z listy wszystkie obiekty, które nie są intami,
  • Odpowiedz
@KsaneK: @venomik: w moim przykładzie chodzi o powiązania pomiędzy elementami z listy sąsiadującymi ze sobą. jeżeli jest dane powiązanie to program usuwa element sąsiadujący z 'i' i tutaj pojawia się problem, bo potrzebuję cofnąć się do początku listy i sprawdzić czy teraz występuje dane powiązanie ( już po usunięciu jednego z elementów). Jeżeli nie ma powiązania iteracja po prostu idzie dalej.
  • Odpowiedz
@Oake:
Cały czas nie wydaje mi się abyś miał powód do powrotu do początku.
Mówisz o powiązaniu z sąsiednimi elementami. Jeśli wiesz masz listę składającą się z 10 obiektów i zauwazyłeś, że obiekt siódmy jest powiazany z ósmym - dlaczego chcesz ponownie sprawdzać czy obiekt pierwszy jest powiązany z drugim?
  • Odpowiedz
@venomik: to może pokażę o co mi konkretnie chodzi, bo nie umiem wytłumaczyć teoretycznie: mam dictionary w którym kluczami są zwierzęta a ich wartościami zwierzęta i rośliny, które te zwierzęta zjadają. parametrem podanym w funkcji jest lista zwierząt w danej kolejności. Funkcja sprawdza każde zwierzę po kolei: jeżeli obiekt(zwierzę,roślina) na lewo jest "diecie" iterowanego zwierzęcia, obiekt na lewo jest usuwany z listy i już tutaj potrzebuję cofnąć się do początku: czy
Oake - @venomik: to może pokażę o co mi konkretnie chodzi, bo nie umiem wytłumaczyć t...

źródło: comment_1648062345OUv3xmhTWHl0qJD0ZVO3YY.jpg

Pobierz
  • Odpowiedz
@venomik: i masz rację, nie potrzebuję wracać do samego początku, chodzi mi bardziej o to żeby po wykonaniu operacji usunięcia nie przechodziło do następnego i. Jeśli pomyślałem o tym w ten sposób, to nasuwa mi się pętla while w pętli for.
  • Odpowiedz