从列表元素中删除空格?

时间:2013-10-20 01:45:05

标签: python string file list

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

['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

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

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

5 个答案:

答案 0 :(得分:3)

我会做这样的事情:

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

这将一起加入列表然后将其拆分。可能有一些更有效的方法,但这种方式很简单。

答案 1 :(得分:2)

默认情况下,

split()会在任何空格上分割,因此您可以通过一个简单的步骤完成整个文件。

words =  f.read().split()

如果您想避免使用f.read()

将整个文件读入内存
words = [word for line in f for word in line.split()]

答案 2 :(得分:1)

.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来缩小它,但这应该足够了。

答案 3 :(得分:0)

您正在寻找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第一

答案 4 :(得分:0)

我喜欢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']