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

pętla python

Object Storage Arubacloud
0 głosów
297 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 (155,460 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 406 wizyt
pytanie zadane 24 listopada 2019 w Python przez kingkushlee Gaduła (3,960 p.)
0 głosów
3 odpowiedzi 977 wizyt
pytanie zadane 11 września 2018 w Python przez Deriquest Użytkownik (550 p.)
0 głosów
2 odpowiedzi 211 wizyt
pytanie zadane 7 października 2020 w Python przez Dawid Popławski Nowicjusz (160 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...