0

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

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

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

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

4

5 回答 5

3

我会做这样的事情:

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

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

于 2013-10-20T01:47:36.127 回答
2

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

words =  f.read().split()

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

words = [word for line in f for word in line.split()]
于 2013-10-20T01:54:26.580 回答
1

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

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

这将为您提供一个嵌套列表,您可以轻松地将其展平。参见例如这个答案这个

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

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

您可以使用一些魔法来将其压缩itertools,但现在应该就足够了。

于 2013-10-20T01:47:41.203 回答
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先调用。

于 2013-10-20T01:47:25.627 回答
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']
于 2013-10-20T01:52:32.397 回答