【问题标题】:Removing a space from a list element?从列表元素中删除空格?
【发布时间】:2013-10-28 16:15:53
【问题描述】:

我想从列表元素中删除空格并将它们分成不同的列表元素。例如,如果我有列表:

['Hello world', 'testing', 'testing two']

我希望列表看起来像:

['Hello', 'world', 'testing', 'testing', 'two']

我遇到的问题是我正在从文件中读取,并且我已经去除了换行符,当我尝试去除空格时,它似乎不起作用。以下是我的代码:

with open(fname, 'r') as f:
  words = [line.strip().strip(' ') for line in f]
print words

这只是打印出我之前提到的内容,列表元素仍然有空格。

如果有人可以帮助我,那就太好了!谢谢!

【问题讨论】:

标签: python string file list


【解决方案1】:

您正在寻找split 方法。做你想做的最简单的方法是这样的:

words = []
with open(fname) as f:
  for line in f:
    words.extend(line.split())

稍微聪明一点的方法是这样的:

import itertools
with open(fname) as f:
  words = list(itertools.chain.from_iterable(l.split() for l in f))

我不知道哪个更快。请注意,在不带分隔符参数的情况下调用时split 有效地执行 strip 所做的以及在内部空格上的拆分,因此您无需先调用 strip

【讨论】:

    【解决方案2】:

    我会这样做:

    " ".join(list).split(" ")
    

    这会将列表连接在一起,然后将其拆分。可能有一些更有效的方法,但这种方法很简单。

    【讨论】:

      【解决方案3】:

      .strip 只删除字符串开头或结尾的内容。你想要的是split空白处的刺痛:

      lines_split = [line.split() for line in f]
      

      这将为您提供一个嵌套列表,您可以轻松地将其展平。例如,请参阅此 answer 或此 one

      我在这里更喜欢的方法是编写一个简单的生成器到yield 一次一个单词。然后,如果需要,您可以稍后将其转换为列表:

      def get_words(filename):
          with open(filename) as fin:
              for line in fin:
                  for word in line.split():
                      yield word
      

      您可以使用itertools 将其压缩,但现在应该足够了。

      【讨论】:

        【解决方案4】:

        我喜欢 Zonedabone 的回答。但这里有另一种方式:

        >>> from itertools import chain
        >>> l = ['Hello world', 'testing', 'testing two']
        >>> result = list(chain.from_iterable(w.split() for w in l))
        # ['Hello', 'world', 'testing', 'testing', 'two']
        

        【讨论】:

        • 就其价值而言,chain.from_iterable(w.split() for w in l) 通常比chain(*[...]) 更可取。后者几乎摆脱了首先使用可迭代对象的所有优势。
        【解决方案5】:

        split() 默认情况下会在任何空白处拆分,因此您可以通过一个简单的步骤完成整个文件。

        words =  f.read().split()
        

        如果您想避免使用f.read() 将整个文件读入内存:

        words = [word for line in f for word in line.split()]
        

        【讨论】:

        • 我考虑过发布这个作为答案......对于非常大的文件可能会出现一些问题,但现在通常这可能不是问题。
        • @mgilson:我也考虑过大文件的问题,但认为如果他有足够的内存来单独保存所有单词,他可能有足够的内存来保存整个块。
        猜你喜欢
        • 2012-01-23
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 2019-04-06
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多