• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

pętla python

VPS Starter Arubacloud
0 głosów
333 wizyt
pytanie zadane 17 października 2022 w Python przez Ichbinda Nowicjusz (230 p.)
Witam, mam pytanie, w jaki sposób moge napisać pętle, najlepiej for w pythonie która by sprawdzała czy pierwszy i ostatni element jest taki sam, drugi i przedostatni też itd.

np.

list=[1,2,3,3,2,1] - 3=3 2=2 1=1 więc jest git

list=[1,2,3,3,1] teraz juz nie jest ok bo 2 != 3

3 odpowiedzi

+3 głosów
odpowiedź 18 października 2022 przez mokrowski Mędrzec (156,220 p.)
edycja 18 października 2022 przez mokrowski

A po co Ci tu pętla?

1. Na liście masz metodę reverse() która ją odwróci. Operacja będzie wykonana na samej liście bo to obiekt mutowalny. Wystarczy więc skopiować listę, jedną z nich odwrócić reverse() i porównać czy są równe.

lst1 = [1,2,3,3,2,1]
lst2 = lst1
lst2.reverse()
print(lst1 == lst2)

2. Dostępna jest funkcja reversed(...). Zwraca iterator na kontener. Wystarczy porównać.

lst = [1,2,3,3,2,1]
print(lst == list(reversed(lst)))

3. No to bonus. Oszczędzenie pamięci. Zbędne jest alokowanie 2 listy. Dla dużych list może mieć znaczenie. Występuje wprawdzie for, ale w kontekście list comprehension.

lst = [1,2,3,3,2,1]
print(
        all(a == b for a, b in zip(lst, reversed(lst)))
)

BTW: Nazywanie zmiennych poprzez słowa kluczowe (a słowo "list" takim jest), to bardzo kiepski pomysł.

+1 głos
odpowiedź 17 października 2022 przez tmar1212 Bywalec (2,600 p.)
edycja 18 października 2022 przez Arkadiusz Waluk

Spróbuj:

def is_palindrome(xs):

    limit = len(xs) // 2

    lengh = len(xs) - 1

    for i in range(limit):

        if xs[i] != xs[lengh - i]:

            return False

    return True
0 głosów
odpowiedź 17 października 2022 przez Apled Dyskutant (9,520 p.)

Takie rozwiązanie na szybko:

lista = [1, 2, 4, 3, 2, 1]
it = 1 # -> zmienna do sprawdzania ostatniego elementu
middle = int(len(lista) / 2) # -> iterujesz tylko do połowy tablicy, bo tylko tyle potrzeba

for i in lista[:middle]:
    # bierzesz ostatni element, przy każdej iteracji pętli, więc każdą iteracją zawężasz/zbiegasz
    # obustronnie do środka listy
    last = lista[len(lista) - it] 

    if i != last:
        print(f"{i} != {last}")
        break # -> jak napotkasz elementy różne to przerywasz pętlę, jak warunek jest fałszywy to sprawdzasz dalej

    print(f"First: {i}, last: {last}")
    it += 1

 

Podobne pytania

+1 głos
2 odpowiedzi 450 wizyt
pytanie zadane 24 listopada 2019 w Python przez kingkushlee Gaduła (3,960 p.)
0 głosów
3 odpowiedzi 1,073 wizyt
pytanie zadane 11 września 2018 w Python przez Deriquest Użytkownik (550 p.)
0 głosów
2 odpowiedzi 230 wizyt
pytanie zadane 7 października 2020 w Python przez Dawid Popławski Nowicjusz (160 p.)

92,775 zapytań

141,703 odpowiedzi

320,560 komentarzy

62,109 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...