Самая эффективная программа-палиндром для python

очень новичок в программировании, и я пытаюсь решить несколько задач Project Euler. Я хотел бы знать код Python, который идентифицирует палиндром и не палиндром. Каков наиболее эффективный способ сделать это? не могли бы вы показать код, который вы считаете наиболее эффективным для этой проблемы.


person user3667054    schedule 18.07.2015    source источник
comment
что ты уже испробовал? Как вы думаете, что было бы наиболее эффективным способом сделать это?   -  person    schedule 18.07.2015
comment
Выполнив много вопросов Эйлера проекта с def isPali(x): return x==int(str(x)[::-1]), я могу сказать вам, что это не ваша проверка палиндрома, на которую вы будете тратить время. Обычно есть откуда взять время :P   -  person NightShadeQueen    schedule 18.07.2015
comment
Когда вы пишете свой вопрос, появляется список под названием Вопросы, на которые, возможно, уже есть ваш ответ. Используйте его. Вы даже можете использовать необычную функцию в своем браузере, называемую вкладками, чтобы открывать более одной страницы одновременно, чтобы не потерять свое место.   -  person MattDMo    schedule 18.07.2015
comment
Не нужно быть придурком по этому поводу.   -  person user3667054    schedule 20.07.2015


Ответы (2)


Вы можете сделать это очень просто, просто проверив, равна ли введенная вами строка самой себе в перевернутом виде (это и есть палиндром).

def check_palindrome(s):
    return s == s[::-1]

[::-1] переворачивает строку, потому что -1 говорит, сколько шагов нужно пройти, а отрицательный будет проходить через строку в обратном порядке.

Если вам нужно будет проверить, являются ли целые числа палиндромами, вы можете сделать:

def check_palindrome(s):
    return str(s) == str(s)[::-1]
person michaelpri    schedule 18.07.2015

Я большой поклонник простоты над (потенциально ложной) оптимизацией. Начните с чего-нибудь прямолинейного и двигайтесь дальше:

def is_palindrom(s):
    length = len(s) 
    for i in range(length / 2):
        if s[i] != s[length - i - 1]:
            return False
    return True
person Mureinik    schedule 18.07.2015
comment
Преждевременная оптимизация — корень всех зол — Дональд Кнут. - person Cloud; 18.07.2015
comment
Просто обратите внимание, что это не будет работать для палиндромов нечетной длины. - person Spencer Wieczorek; 18.07.2015
comment
@Mureinik Это и вам нужно сделать range целым числом, range(math.floor(length / 2)). - person Spencer Wieczorek; 18.07.2015
comment
@SpencerWieczorek Без какой-либо спецификации версии я просто предположил, что OP означает Python 2. Конечно, в Python 3 вы были бы правы. - person Mureinik; 18.07.2015
comment
господи, сколько у них версий питона? и они относительно одинаковы? - person user3667054; 18.07.2015
comment
@user3667054 user3667054 Многие, но люди заботятся о двух версиях: 2.7 и 3.4, и эти две версии несовместимы друг с другом. Лично мне нравится range(length//2) независимо от того, какую версию я использую, потому что она будет работать одинаково для обеих. Но они не слишком отличаются. - person NightShadeQueen; 18.07.2015
comment
Первое правило оптимизации программы: не делайте этого. Второе правило оптимизации программ (только для экспертов!): пока не делайте этого. — Майкл А. Джексон - person Dleep; 18.07.2015