Python 如何用空格替换标点符号

Python 如何用空格替换标点符号,python,Python,如果输入是 punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""] new_s = '' for i in s: if i not in punc_list: new_s += i return new_s.lower() 我希望输出为: s = ("Hey! M'y nam;e i's") 我在用空格替换punc时遇到问题如果我不在punc\u列表中,我只

如果输入是

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
new_s = ''
for i in s:
    if i not in punc_list:
        new_s += i
return new_s.lower()
我希望输出为:

s = ("Hey! M'y nam;e i's")

我在用空格替换punc时遇到问题

如果我不在punc\u列表中,我只想在
中添加一个else语句:
,这样代码看起来像这样:

s = ('hey  m y name e i s') 
所有这些都表明: 如果该字符不在标点符号列表中,请将其添加到新的
字符串中。

如果它在标点符号列表中,则在新的
字符串中添加一个空格。

如果我不在punc_列表中,我只会在
中添加一个else语句:
,这样代码看起来像这样:

s = ('hey  m y name e i s') 
所有这些都表明: 如果该字符不在标点符号列表中,请将其添加到新的
字符串中。

如果它在标点符号列表中,则在新的
字符串中添加一个空格。

就像@DYZ所说的,您只需要另一个条件语句,将特殊字符替换为空格:

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
new_s = ''
for i in s:
    if i not in punc_list:
        new_s += i
    else:
        new_s += ' '

return new_s.lower()

输出看起来就像您想要的:
嘿,m y nam e i s

就像@DYZ所说的,您只需要另一个用空格替换特殊字符的条件语句:

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
new_s = ''
for i in s:
    if i not in punc_list:
        new_s += i
    else:
        new_s += ' '

return new_s.lower()

输出看起来像您想要的:
hey m y name i s
使用
str.translate
。将
punc_列表中的所有字符转换为空格

def func(s):
    punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
    new_s = ''
    for i in s:
        if i not in punc_list:
            new_s += i
        else:
            new_s += ' '
    return new_s.lower()

s = ("Hey! M'y nam;e i's")
new_s = func(s)
print (new_s)

您可以使用dict comprehension动态创建字典映射,它将所有标点符号代码(使用
ord
函数)映射到一个空格。

使用
str.translate
。将
punc_列表中的所有字符转换为空格

def func(s):
    punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
    new_s = ''
    for i in s:
        if i not in punc_list:
            new_s += i
        else:
            new_s += ' '
    return new_s.lower()

s = ("Hey! M'y nam;e i's")
new_s = func(s)
print (new_s)

您可以使用dict comprehension动态创建字典映射,它将所有标点符号代码(使用
ord
函数)映射到一个空格。

使用两个循环查看此代码:

>>> punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
>>> s = "Hey! M'y nam;e i's"
>>> s.translate({ord(p): " " for p in punc_list})
'Hey  M y nam e i s'

请参阅此代码,使用2个循环:

>>> punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
>>> s = "Hey! M'y nam;e i's"
>>> s.translate({ord(p): " " for p in punc_list})
'Hey  M y nam e i s'

当字符是标点符号时,您忘记添加空格
'
。而且,
punc_列表
实际上不必是一个
列表
;您只需将其设置为一个长字符串并迭代字符,或者如注释中所述,只需使用
string.parantion
。为了提高查找速度,您还可以将其设置为
,但在这种情况下,这并不重要:

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
s = "Hey! M'y nam;e i's"
new_s = ''

for x in punc_list:
  for i in s:
    if i==x:
        s=s.replace(i,new_s)


print(s)
或者稍微短一点,使用三元表达式:

甚至更短,使用:

甚至更短,使用正则表达式:


当字符是标点符号时,您忘记添加空格
'
。而且,
punc_列表
实际上不必是一个
列表
;您只需将其设置为一个长字符串并迭代字符,或者如注释中所述,只需使用
string.parantion
。为了提高查找速度,您还可以将其设置为
,但在这种情况下,这并不重要:

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
s = "Hey! M'y nam;e i's"
new_s = ''

for x in punc_list:
  for i in s:
    if i==x:
        s=s.replace(i,new_s)


print(s)
或者稍微短一点,使用三元表达式:

甚至更短,使用:

甚至更短,使用正则表达式:


家庭作业问题是否有助于您了解循环?我认为学习口述和翻译也很有用

import re
def no_punc(s):
    return re.sub("\W", " ", s).lower()

家庭作业问题是否有助于您了解循环?我认为学习口述和翻译也很有用

import re
def no_punc(s):
    return re.sub("\W", " ", s).lower()
适用于Python 3.8.2

t = str.maketrans(dict.fromkeys(punc_list, " "))
new_s = s.lower().translate(t)
适用于Python 3.8.2

t = str.maketrans(dict.fromkeys(punc_list, " "))
new_s = s.lower().translate(t)

这是家庭作业,还是你能用正则表达式?还有,就是那些标点符号或所有特殊字符?在
else
分支中,添加一个空格。@tobias_k是的,这是家庭作业。我在考虑所有特别的东西characters@DYZ哦,好的,它起作用了!非常感谢。作为旁注,我建议您使用
字符串。标点符号
而不是您自己的
点列表
。这是家庭作业,还是您可以使用正则表达式?还有,就是那些标点符号或所有特殊字符?在
else
分支中,添加一个空格。@tobias_k是的,这是家庭作业。我在考虑所有特别的东西characters@DYZ哦,好的,它起作用了!非常感谢。作为旁注,我建议您使用
字符串.标点符号
而不是您自己的
点列表
。为什么不在punc_列表中使用
{ord(x):''代表x
?为什么不在punc_列表中使用
{ord(x):''代表x}呢
?请在代码中添加解释,以便提问者能够理解您为什么给出此解决方案及其工作原理。请在代码中添加解释,以便提问者能够理解您为什么给出此解决方案及其工作原理。