【问题标题】:Remove whitespace and make all lowercase in a string for python删除空格并在python的字符串中全部小写
【发布时间】:2011-04-27 03:45:08
【问题描述】:

如何从字符串中删除所有空格并使python中的所有字符小写?

另外,我可以像在 javascript 中那样将此操作添加到字符串原型吗?

【问题讨论】:

    标签: python regex string


    【解决方案1】:

    简单的快速答案怎么样?没有map,没有for 循环,...

    >>> s = "Foo Bar " * 5
    >>> s
    'Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar '
    >>> ''.join(s.split()).lower()
    'foobarfoobarfoobarfoobarfoobar'
    >>>
    

    [Python 2.7.1]

    >python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join(c.lower() for c in s if not c.isspace())"
    100000 loops, best of 3: 11.7 usec per loop
    
    >python27\python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join(  i.lower() for i  in s.split()  )"
    100000 loops, best of 3: 3.11 usec per loop
    
    >python27\python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join( map(str.lower, s.split() )  )"
    100000 loops, best of 3: 2.43 usec per loop
    
    >\python27\python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join(s.split()).lower()"
    1000000 loops, best of 3: 1 usec per loop
    

    【讨论】:

    • +1,确实是迄今为止我见过的最快的。通过 timeit 模块使用 250k 次迭代确认 0.403948068619s 使用 split,0.585318088531s 使用 map。谢谢!
    【解决方案2】:

    这里是:

    your_string.replace(" ","").lower()
    

    【讨论】:

      【解决方案3】:
      ''.join(c.lower() for c in s if not c.isspace())
      

      没有。 Python 不是 Ruby。

      【讨论】:

      • 是正则表达式在python中使用较少的东西吗?
      • 正则表达式...通常不需要。
      • @DutrowLLC,它们通常不是必需的,但有时它们是必不可少的。
      • 如果您需要速度,这不是要走的路,请使用下面 John Machin 的解决方案。在使用 timeit 进行 250k 次迭代时,此函数的时钟为 2.14721894264,而使用连接拆分解决方案的时钟为 0.402789115906。
      • var = ''.join(c.lower() for c in var if not c.isspace())
      【解决方案4】:

      这是一个使用正则表达式的解决方案:

      >>> import re
      >>> test = """AB    cd KLM
          RST l
          K"""
       >>> re.sub('\s+','',test).lower()
        'abcdklmrstlk'
      

      【讨论】:

      • 这似乎是最慢的,在 250k 迭代中为 0.809034109116 秒,而 John Machin 的解决方案为 0.411396980286 秒。 Map 也比这快 0.582627058029s。
      • +1。最后,有人回答了 OPs 的问题(部分)!是的,正则表达式不是解决这个问题的正确方法,但它仍然值得了解。一个好的回应应该是,这不是必需的,但这是你将如何做到的......
      【解决方案5】:
      >>> string=""" a b      c
      ... D E         F
      ...                     g
      ... """
      >>> ''.join(  i.lower() for i  in string.split()  )
      'abcdefg'
      >>>
      

      >>> ''.join( map(str.lower, string.split() )  )
      'abcdefg'
      

      【讨论】:

      • 您的加入拆分解决方案仍然比 John Machin 的答案慢很多,使用 timeit 将其计时为 0.733391046524 秒,代表 25 万次,而他的解决方案为 0.413959026337 秒。以最快的速度前进!
      猜你喜欢
      • 2014-02-11
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2016-04-23
      • 2015-04-21
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      相关资源
      最近更新 更多