[英]Can someone explain why replace isn't working for me
我需要删除句子中的多余空格。 这句话是"I like python"
,我需要打出"I like python"
。 所以我像这样使用replace:
>>>
>>> sentence="I like python"
>>> def checkio(element):
newelement=element.replace(" ", " ") and element.replace(" ", " ")
return newelement
>>> checkio(sentence)
'I like python'
>>>
而且您会看到,即使我(认为)我告诉它用" "
替换" "
,结果还是"I like python"
" "
。 有人可以帮我弄清楚为什么这没用吗?
这可能是您想要做的:
def checkio(element):
newelement = element.replace(" ", " ").replace(" ", " ")
return newelement
您甚至可以将其缩短为
def checkio(element):
return element.replace(" ", " ").replace(" ", " ")
但是,如果要替换任意数量的空格怎么办? 最好将句子拆分为任意数量的空格,然后将其与单个空格重新合并在一起。 为此,您将使用
def checkio(element):
return " ".join(element.split())
split
方法采用字符串并将其分成列表。 不带参数的话,它在空格之间分开:
>>> "I like python".split()
["I", "like", "python"]
join
方法使用列表元素之间的字符串来获取列表并从中生成字符串:
>>> ' '.join(["I", "like", "python"])
"I like python"
>>> '__HELP__'.join(["I", "like", "python"])
"I__HELP__like__HELP__python"
为什么您的原始尝试失败了
线
newelement = element.replace(" ", " ") and element.replace(" ", " ")
没有按照您的期望进行操作,因为它使用的是字符串的“真实性”。 and
运算符查看逻辑上的东西。 在python中,除""
外的所有字符串都被视为True
。 您可以使用它来执行称为“短路”的操作。
当使用and
,left和right语句都必须为true才能使它的值为True
。 如果左侧部分为False
,则没有理由继续进行右侧部分,并且评估在那里停止(也称为“短路”)。 如果为true,则需要检查右侧以查看整个语句是否为true。 您可以利用此事实,如果为false则返回left语句,如果为true则返回right:
>>> a = "a" and "b"
>>> a
"b"
>>> a = "" and "b"
>>> a
""
>>> # It works oppositely with "or"
>>> a = "a" or "b"
>>> a
"a"
>>> a = "" or "b"
>>> a
"b"
element.replace(" ", " ")
返回一个字符串, element.replace(" ", " ")
。 由于字符串的计算结果为True
,因此您基本上只会返回and
的正确语句。
这在python中不是逻辑运算符的常见用法(尽管在其他语言中更常见)
如何使用它删除多余的空格:
" ".join(sentence.split())
如果需要,可以将其打包为一个函数:
def checkio(element):
return " ".join(element.split())
and
语句中。 Python首先评估element.replace(" ", " ")
,这给出了"I like python"
( True
声明)。
由于这是真的,Python将继续执行下一条语句,并返回该值
下一条语句是element.replace(" ", " ")
,其本身的计算结果为"I like python"
最后,它将此值设置为newelement
,您的函数将返回该值
element.replace(...)
不会修改element
它只会返回字符串的修改版本
你可以用
element = element.replace(' ', ' ')
newelement = element.replace(' ', ' ')
虽然这不是一个很好的通用解决方案
str.split()
将为您组合任意数量的空格,因此
newelement = ' '.join(element.split())
是完成此特定任务的最简单方法。 如果您必须删除多余的内容.
从"I..like...python"
,您将需要另一种方法
正如评论中提到的那样,我认为您对“和”的理解是错误的。
人们回避的实际原因是,第一条语句实际上距离每个实例2个空格,而第二条语句从不找到任何3个空格的段,而给您留下(“” ...“”)
因此2空间+ 3空间变成1空间+ 2空间。 (避免键入,因为此处很难查看空格)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.