from string import punctuation, ascii_lowercase
def is_palindrome(string):
"""Return True if string is a palindrome,
ignoring whitespaces and punctuation.
"""
new = ""
for char in string:
lc = char.lower()
for x in lc:
if x in ascii_lowercase:
new += x
return new[::-1] == new
# string = "Was it a rat I saw?"
# print(is_palindrome(string))发布于 2013-09-28 03:30:16
punctuationstring )from string import ascii_letters
def is_palindrome(candidate):
"""
Returns True if candidate is a palindrome, ignoring whitespaces and punctuation.
"""
stripped = [char.lower() for char in candidate if char in ascii_letters]
return stripped == stripped[::-1]发布于 2013-09-28 10:27:19
这个问题大部分得到了回答,但我认为排除数字并不完全正确,更理想的做法是把整个字符串小写,而不是逐字逐句小写。还有应该检查空字符串。所以我的版本是这样的:
from string import digits, ascii_lowercase
chars = digits + ascii_lowercase
def is_palindrome(s):
norm = [c for c in s.lower() if c in chars]
return norm[::-1] == norm != []但是,在2013年,您可能希望得到这个函数的Unicode版本,它可以如下所示:
from unicodedata import category
def is_palindrome(u):
norm = [c for c in u.lower() if category(c)[0] in "LN"]
return norm[::-1] == norm != []is_palindrome的Unicode版本的一些示例:
>>> is_palindrome(u"...")
False
>>> is_palindrome(u"Was it a rat I saw?")
True
>>> is_palindrome(u"А роза упала на лапу Азора.")
True发布于 2013-09-28 03:32:00
我认为我们可以用一种更好的方式建立新的字符串:
from string import ascii_letters
def is_palindrome(s):
new = ''.join(c.lower() for c in s if c in ascii_letters)
return new[::-1] == new如果我们想避免从整个字符串中删除非字母,当前几个字符可能足以确定它是否是回文时,我们可能会懒得进行转换。还有一个很好的想法,我们可以把过滤和规范化划分成单独的逻辑。(见像本地人一样循环)
from string import ascii_lowercase
from itertools import izip
def just_lowercase_ascii(s):
for char in s:
if char.lower() in ascii_lowercase:
yield char.lower()
def is_palindrome(s):
for char1, char2 in izip(just_lowercase_ascii(reversed(s)), just_lowercase_ascii(s):
if char1 != char2:
return False
return True或
def is_palindrome(s):
all(c1 == c2 for c1, c2 in izip(just_lowercase_ascii(reversed(s)),
just_lowercase_ascii(s)编辑:没有改变参数名称,但字符串是坏的,其他答案指出。
https://codereview.stackexchange.com/questions/31928
复制相似问题