省略特殊字符和数字的反向字符串

时间:2019-06-07 15:15:11

标签: python

在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]

4 个答案:

答案 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)

您可以按照以下步骤进行操作:

  1. 使用filter
  2. 过滤字母字符
  3. 使用join
  4. 加入结果列表以创建新字符串
  5. 反向结果字符串

这是代码。

def reverse_letter(string):
    filtered_string = filter(lambda c: c.isalpha(), string)
    result = ''.join(filtered_string)
    return result[::-1]

另一个解决方案在这里。

  1. 以相反的顺序迭代字符串并获取字母字符列表
  2. 使用join
  3. 加入结果列表
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()。