Próbuję zrozumieć podstawy list w Pythonie. Napisałem przykładowy kod kontroli łańcucha Palindrome w Pythonie. Próbuję zrozumieć, dlaczego nie działa. Porównuję parametr string z parametrem listy.

Czy ktoś może mi wyjaśnić, dlaczego poniższy kod daje błędne wyjście?

class Palindrome:

    @staticmethod
     def is_palindrome(word):
         i = 0
         l = len(word)
         rev = []
         print(l)
         while l > 0:
             rev.insert(i, word[l - 1])
             i = i + 1
             l = l - 1

         if rev == word:
             print(test)
             print(word)
             return True
         else:
             print(rev)
             print(word)
             return False

print(Palindrome.is_palindrome('tatat'))

Wyjście dla powyższego kodu jest :

$python main.py
5
['t', 'a', 't', 'a', 't']
tatat
False

Jeszcze jedna rzecz: Dlaczego drukuje wartość tablicy, takiej jak ['T', "A", "T", "A", "T" zamiast tatat . Wypróbowałem również metodę append(), ale bez użycia, a wynik jest taki sam.

0
Ravi Kumar B 5 czerwiec 2018, 12:46

4 odpowiedzi

Najlepsza odpowiedź

Nie wiem, dlaczego ludzie tutaj reagują. Jeśli ktoś przyjdzie tutaj, aby pomóc mu pomóc (jeśli możemy) lub przynajmniej nie zniechęcaj go. Co jest nie tak w moim pytaniu? Jeśli jest źle, daj mi znać w gładkim sposobie zamiast atakować całkowicie. Jesteśmy tutaj, aby czegoś nauczyć i rosnąć razem. W każdym razie, oto rozwiązanie do pytania, które opublikowałem powyżej:

class Palindrome:

@staticmethod
def is_palindrome(word):
    i= 0
    l= len(word)
    rev = ""
    print(l)
    while(l>0):
        rev += word[l - 1]
        l = l-1
        i =i+1
    if (rev == word):
        print(rev)
        print(word)
        return True
    else:
        print(rev)
        print(word)
        return False
print(Palindrome.is_palindrome('tatat'))
0
Ravi Kumar B 5 czerwiec 2018, 11:05

Wkładasz znaki do listy, którego wynik końcowy jest nadal lista i wyraźnie nie ciągami; Dlatego twój test Palindrome powraca False, ponieważ co porównujesz, jest ['t', 'a', 't', 'a', 't'] == 'tatat'.

Jeśli chcesz to zrobić poprawnie, musisz zadeklarować rev jako pusty ciąg i dołącz do niego.

 rev = ''
 for i in range(len(word)):
     rev += word[len(word) - i]
2
quamrana 5 czerwiec 2018, 10:06

Porównujesz string (twoje wejście słów) za pomocą znaków list. Będziesz musiał {x2}} Twoje znaki A string Przed porównaniem do oryginału {X4}}.

1
Fynn Becker 5 czerwiec 2018, 09:57

Myślę, że poniższa odpowiedź podsumowuje prawie wszystkie pytania dotyczące różnic między listą a tablicą:

  • Główną różnicą między tymi dwoma typami danych jest operacja możesz na nich wykonać. Na przykład możesz podzielić tablicę o 3 i będzie podzielić każdy element tablicy o 3. Nie można tego zrobić z listą.

  • Lista jest częścią składni Pythona, więc nie musi być zadeklarowany, podczas gdy musisz zadeklarować tablicę przed użyciem.

  • Możesz przechowywać wartości różnych typów danych na liście (heterogeniczny), podczas gdy w tablicy można przechowywać tylko wartości tylko ten sam typ danych (homogenious).

  • Tablice są bogate w funkcje i szybko, jest szeroko stosowany Operacje arytmetyczne i do przechowywania dużej ilości danych - w porównaniu do listy.

  • Tablice zajmują mniej pamięci w porównaniu z listami.

0
fahad 24 luty 2020, 05:08