我想在列表中找到所有“短语”,将它们从列表中删除,这样我只剩下单词(没有空格)。我正在制作一个刽子手类型的游戏,并希望计算机选择一个随机的单词。我是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)
答案 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模块可能对将来的语言处理任务很有用。
希望这有帮助!