打开文件
romeo.txt
并逐行阅读。对于每一行, 使用split()
函数将该行拆分为单词列表。该 程序应该建立一个单词列表。对于每行上的每个单词检查 查看单词是否已经在列表中,如果没有将其附加到列表中 名单。程序完成后,排序并打印生成的单词 按字母顺序排列。
http://www.pythonlearn.com/code/romeo.txt
这是我的代码:
fname = raw_input("Enter file name: ")
fh = open(fname)
for line in fh:
for word in line.split():
if word in line.split():
line.split().append(word)
if word not in line.split():
continue
print word
由于某种原因,它只返回最后一行的最后一个单词。
答案 0 :(得分:0)
在循环的顶部,添加一个列表,您将收集单词。现在你只是放弃一切。
你的逻辑也是相反的,你正在丢弃你应该保存的词。
words = []
fname = raw_input("Enter file name: ")
fh = open(fname)
for line in fh:
for word in line.split():
if word not in words:
words.append(word)
fh.close()
# Now you should sort the words list and continue with your assignment
答案 1 :(得分:0)
尝试以下操作,它使用set()
来构建唯一的单词列表。每个单词也都是低位的,以便"" """对待是一样的。
import re
word_set = set()
re_nonalpha = re.compile('[^a-zA-Z ]+')
fname = raw_input("Enter file name: ")
with open(fname, "r") as f_input:
for line in f_input:
line = re_nonalpha.sub(' ', line) # Convert all non a-z to spaces
for word in line.split():
word_set.add(word.lower())
word_list = list(word_set)
word_list.sort()
print word_list
这将显示以下列表:
['already', 'and', 'arise', 'bits', 'breaks', 'but', 'east', 'envious', 'fair', 'grief', 'has', 'is', 'it', 'juliet', 'kill', 'light', 'many', 'moon', 'pale', 'punctation', 'sick', 'soft', 'sun', 'the', 'this', 'through', 'too', 'way', 'what', 'who', 'window', 'with', 'yonder']
答案 2 :(得分:0)
sorted(set([w for l in open(fname) for w in l.split()]))
答案 3 :(得分:0)
我认为你误解了/** @var foo $foo */
/** @var bar $bar */
$all = $this->getBaz($foo,$bar);
正在做什么。 line.split()
将返回一个包含"字词"的列表在字符串line.split()
中。在这里,我们解释一个"字" as"子字符串由空格字符"分隔。因此,如果line
等于line
,"Hello, World. I <3 Python"
将返回列表line.split()
。
当您编写["Hello,", "World.", "I", "<3", "Python"]
时,您正在遍历该列表的每个元素。所以条件for word in line.split()
永远都是真的!你真正想要的是你已经遇到过的#34;字的累积列表。在程序的顶部,您可以使用word in line.split()
创建它。然后,对于每行中的每个单词,您都要检查
DiscoveredWords = []
知道了吗? :)现在,因为你似乎是Python的新手(顺便说一下,欢迎来到这里)这里是我编写代码的方式:
if word not in DiscoveredWords:
DiscoveredWords.append(word)
让我们快速浏览一下这段代码,以便您了解正在发生的事情:
fname = raw_input("Enter file name: ")
with open(fname) as fh:
words = [word for line in fh for word in line.strip().split()]
words = list(set(words))
words.sort()
是一个值得记住的便利技巧。它允许您确保您的文件被关闭!一旦python退出with open(fname) as fh
块,它将自动关闭文件:D
with
是另一个方便的伎俩。这是获取包含文件中所有单词的列表的更简洁方法之一!我们告诉python通过获取文件中的每一行(words = [word for line in fh for word in line.strip().split()]
)以及该行中的每个单词(for line in fh
)来创建列表。
for word in line.strip().split()
将我们的列表转换为words = list(set(words))
,然后返回set
。这是一种快速删除重复项的方法,因为python中的list
包含唯一元素。
最后,我们使用set
对列表进行排序。
希望这有用且有启发性:)
答案 4 :(得分:0)
words=list()
fname = input("Enter file name: ")
fh = open(fname).read()
fh=fh.split()
for word in fh:
if word in words:
continue
else:
words.append(word)
words.sort()
print(words)