我想从列表元素中删除空格并将它们分成不同的列表元素。例如,如果我有列表:
['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
这只是打印出我之前提到的内容,列表元素仍然有空格。
如果有人能帮助我,那就太好了!谢谢!
答案 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']