【问题标题】:strip command doesn't remove 'e' in the stringstrip 命令不会删除字符串中的“e”
【发布时间】:2017-04-18 17:25:26
【问题描述】:

我正在尝试从给定单词中删除元音并返回该单词。

例如

word = "helleeEoo"

如果我使用如下所示的 strip 命令,我会得到“hell”而不是“hll”的输出

word = word.strip("aAeEiIoOuU")

但如果我使用如下所示的 join 命令,它可以正常工作:

word = ''.join(c for c in word if c not in 'aAeEiIoOuU')

我正在使用 python 3,我想知道为什么在 strip 命令的情况下,最终输出中会出现“e”?

【问题讨论】:

  • 因为剩下的“e”不在字符串的开头或结尾。它受到“h”和“ll”的保护。
  • strip 方法只是从字符串的开头或结尾剥离字符。看看翻译。
  • @kindall .. 感谢更新.. 我认为 strip 会删除字符串中的所有字符实例,而不仅仅是第一个和最后一个。在我的示例中,由于尾随 O 被删除,即使中间的“e”也被删除。
  • 无论什么文档给了你这个想法,扔掉它......
  • 顺便说一句,传递.join 一个列表解析比传递一个生成器表达式更好。如果您传递 .join 一个迭代器,它必须从中创建一个列表,因为它需要扫描字符串两次。在第一次扫描时,它会计算总字符串长度,以便分配目标字符串,然后进行第二次扫描以将字符复制到目标。 Python 核心开发者 Raymond Hettinger 的This answer 显示了速度差异。

标签: python python-3.x


【解决方案1】:

来自docs(强调我的):

返回删除前导和尾随字符的字符串副本。 chars 参数是一个字符串,指定要删除的字符集。如果省略或无,chars 参数默认删除空格。 chars 参数不是前缀或后缀;相反,它的值的所有组合都被剥离:
...
最外面的前导和尾随字符参数值从字符串中删除。字符从前端删除,直到到达字符集中字符集中不包含的字符串字符。尾端也会发生类似的动作。

strip 没有删除的“e”不在字符串的两端。它在中间,因此strip 不会碰它。

在您的第二个示例中,c for c in word 触及字符串中的每个字符,因此中间的“e”被触及,由not in 测试,并被省略。

【讨论】:

    【解决方案2】:

    改用推导式,strip 只在字符串的末尾起作用。

    ''.join(x for x in word if x not in 'aeiouAEIOU')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 2022-12-05
      相关资源
      最近更新 更多