【问题标题】:Why doesn't .strip() remove whitespaces? [duplicate]为什么 .strip() 不删除空格? [复制]
【发布时间】:2017-03-19 14:13:42
【问题描述】:

我有一个这样开头的函数:

def solve_eq(string1):
    string1.strip(' ')
    return string1

我正在输入字符串 '1 + 2 * 3 ** 4',但 return 语句根本没有去除空格,我不知道为什么。我什至尝试过.replace(),但没有成功。

【问题讨论】:

  • 字符串是不可变的,所以不要指望任何东西就地作用于它们。使用string1.strip()的返回值。
  • 我需要进一步修改字符串,所以我可以做类似 string2 = string1.strip (' ') 的事情吗?
  • 试试看。 (这正是我的观点)。也可以重新绑定string1 = string1.strip(' ')
  • 太好了,非常感谢!
  • strip 不会做你想做的事。 strip 删除 trailingleading 空格。这只是一个字符串不变性的问题,使用string1.replace(' ', '') 来解决这个问题。

标签: python


【解决方案1】:

strip 不会在任何地方删除空格,只会在开头和结尾删除空格。试试这个:

def solve_eq(string1):
    return string1.replace(' ', '')

这也可以使用正则表达式来实现:

import re

a_string = re.sub(' +', '', a_string)

【讨论】:

  • 我是反对者之一。不要个人认为,当然也不要放弃 SO。我拒绝回答的原因是 OP 对字符串和相关方法的工作方式有一个非常基本的误解。主要问题不是使用.strip() 的返回值,而是认为该方法改变了输入字符串。像这样的问题像蘑菇一样突然出现,并且本质上是错字问题(不是实际的错字,而是大脑放屁)。一旦问题关闭,回答此类问题将停止自动删除过程。你在浪费时间回答他们。
  • 我是一个机器人,我从不把事情放在心上……是的,“我什至尝试过.replace()”有点暴露了它。但是投票反对而不是要求在 cmets 中删除?我只是为了要点;)不过,您是完全正确的,需要过滤问题,或者至少根据要点或其他内容立即标记。我回答的大部分问题都是使用 SO!也许 SO 应该为新手提供 JFGI 标志?哈!无论如何,感谢您的解释,不胜感激。
【解决方案2】:

strip 不会更改原始字符串,因为字符串是不可变的。另外,不要使用string1.strip(' '),而是使用string1.replace(' ', '') 并将返回值设置为新字符串,或者直接返回。

选项 1

def solve_eq(string1):
    string1 = string1.replace(' ', '')
    return string1

选项 2

def solve_eq(string1):
    return string1.replace(' ', '')

【讨论】:

    【解决方案3】:

    strip 返回剥离后的字符串;它不会修改原始字符串。

    【讨论】:

    • 我怀疑这与它有关。出于好奇,Python 以这种方式工作的任何原因?
    • @Lanier 我的评论如何解释这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多