删除带空格的单词

时间:2017-02-26 16:16:17

标签: python

我想在列表中找到所有“短语”,将它们从列表中删除,这样我只剩下单词(没有空格)。我正在制作一个刽子手类型的游戏,并希望计算机选择一个随机的单词。我是Python和编码的新手,所以我很高兴听到我的代码的其他建议。

import random
fhand = open('common_words.txt')

words = []

for line in fhand:
    line = line.strip()
    words.append(line)

for word in words:
    if ' ' in word:
        words.remove(word)

print(words)

5 个答案:

答案 0 :(得分:0)

使用str.split()。默认情况下,它按空格和换行符分隔。

>>> 'some words\nsome more'.split()
['some', 'words', 'some', 'more']
>>> 'this is a sentence.'.split()
['this', 'is', 'a', 'sentence.']
>>> 'dfsonf 43 SDFd fe@2'.split()
['dfsonf', '43', 'SDFd', 'fe@2']

正常阅读文件并以这种方式列出:

words = []
with open('filename.txt','r') as file:
    words = file.read().split()

那应该是好的。

答案 1 :(得分:0)

集合比列表更有效。当像这里一样懒散地构建时,你可以获得显着的性能提升。

# Load all words
words = {}
with open('common_words.txt') as file:
    for line in file.readlines():
        line = line.strip()
        if " " not in line:
            words.add(line)
# Can be converted to one-liner using magic of Python
words = set(filter(lambda x: " " in x, map(str.strip, open('common_words.txt').readlines())))

# Get random word
import random
print(random.choice(words))

答案 2 :(得分:0)

with open( 'common_words.txt', 'r' ) as f:
    words = [ word for word in filter( lambda x: len( x ) > 0 and ' ' not in x, map( lambda x: x.strip(), f.readlines() ) ) ]
使用

with是因为文件对象是content managers。奇怪的类似列表的语法是list comprehension,因此它从括号内的语句构建一个列表。 map是一个函数,它接受一个iterable,将一个提供的函数应用于iterable中的每个项目,将每个转换结果放入一个新的列表*。 filter是一个函数,它接受一个iterable,根据提供的谓词测试每个项目,将评估为True的每个项目放入一个新列表*。 lambda用于在线定义函数(具有特定签名)。

*:实际的返回类型是generators,其功能类似于迭代器,因此它们仍然可以与for循环一起使用。

答案 3 :(得分:0)

我不确定我是否理解正确,但我认为split()方法适合您,例如:

with open('common_words.txt') as f:
    words = [line.split() for line in f]

words = [word for words in words_nested for word in words]  # flatten nested list

答案 4 :(得分:0)

如上所述,     。分裂() 方法可以是一个解决方案。

此外,NLTK模块可能对将来的语言处理任务很有用。

希望这有帮助!