无法解决如何从另一个列表中删除字符列表的问题

Can't wrap my head around how to remove a list of characters from another list

我已经能够从用户输入的字符串中分离出我想要排除的字符列表(或字符串)。但是我不知道如何删除所有这些不需要的字符。在我这样做之后,我想我可以尝试加入用户字符串,这样它就变成了一个字母输入,就像说明中说的那样。

说明:

删除所有非字母字符 编写一个程序,从给定的输入中删除所有非字母字符。

例如,如果输入是:
-你好,1个世界$!
输出应该是:
你好世界

我的代码:

userEntered = input()
makeList = userEntered.split()
def split(userEntered):
    return list(userEntered)
    
    
if userEntered.isalnum() == False:
    for i in userEntered:
        if i.isalpha() == False:
            #answer = userEntered[slice(userEntered.index(i))]
           reference = split(userEntered)
           excludeThis = i
           print(excludeThis)
 
    

当我打印 excludeThis 时,我得到这个作为我的输出:

-
,
 
1
 
$
!

所以我认为我可能走在正确的轨道上。我需要弄清楚如何从用户输入中获取这些字符。感谢任何帮助。

循环输入字符串。如果字符是字母,则将其添加到结果字符串中。

userEntered = input()
result = ''
for char in userEntered:
    if char.isalpha():
        result += char
print(result)

这也可以用正则表达式来完成:

import re

userEntered = input()
result = re.sub(r'[^a-z]', '', userEntered, flags=re.I)

正则表达式 [^a-z] 匹配除字母字符以外的任何内容。 re.I 标志使其成为 case-insensitive。这些都被替换为一个空字符串,这将删除它们。

这基本上有两个主要部分:将 alpha 与 non-alpha 区分开来,并获得只有前者的字符串。如果 isalpha() 对前者满意,那么就剩下后者了。我的理解是,被认为最 Pythonic 的解决方案是加入理解。这会像这样:

''.join(char for char in userEntered if char.isalpha())

顺便说一句,代码中有几个地方使它变得比需要的更复杂。在 Python 中,您可以遍历字符串,因此无需将 userEntered 转换为列表。 isalnum() 检查字符串是否全是字母数字,所以它是无关紧要的(字母数字包括数字)。您不应该将布尔值与 TrueFalse 进行比较,只需使用布尔值即可。因此,例如,if i.isalpha() == False: 可以简化为 if not i.isalpha():.