在codewars上使用python遇到了一个我无法解决的问题。
任务 给定一个字符串str,将其反转即可,省略所有非字母字符。
示例
For str = "krishan", the output should be "nahsirk".
For str = "ultr53o?n", the output should be "nortlu".
输入/输出 [输入]字符串str
字符串由小写拉丁字母,数字和符号组成。
[输出]字符串
我使用扩展的slice运算符来反转字符串,但是我不知道如何摆脱特殊字符
def reverse_letter(string):
return string [::-1]
答案 0 :(得分:1)
带有[::-1]
的反向字符串和校验字符是带有.isalpha()
的字母
string = "ultr53o?n"
print(''.join(c for c in string[::-1] if c.isalpha()))
'nortlu'
答案 1 :(得分:1)
使用正则表达式。
例如:
import re
data = ["krishan", "ultr53o?n"]
for i in data:
print(re.sub(r"[^a-zA-Z]", "", i)[::-1]) # `[^a-zA-Z]` Removes everything except letters.
输出:
nahsirk
nortlu
答案 2 :(得分:0)
您可以按照以下步骤进行操作:
filter
join
这是代码。
def reverse_letter(string):
filtered_string = filter(lambda c: c.isalpha(), string)
result = ''.join(filtered_string)
return result[::-1]
另一个解决方案在这里。
join
def reverse_letter(string):
char_list = [c for c in string[::-1] if c.isalpha()]
return ''.join(char_list)
答案 3 :(得分:0)
您几乎拥有它,只需在恢复字符串之前对其进行清理(例如,使用列表理解功能,就可以像对待列表一样对字符串进行迭代)
def reverse_and_clean(string):
return ''.join([s for s in string if s.isalnum()])[::-1]
检查is ....函数以获得所需的特定字符,例如isalpha(如果只希望使用字母),如果只有字母数字等,则为isalnum()。