我正在尝试按字母顺序对文件中的单词进行排序。然而,程序根据他们的第一句话对行而不是单词进行排序。在这里。
fname = raw_input("Enter file name: ")
fh = open(fname)
lst = list()
for line in fh:
lst2 = line.strip()
words = lst2.split()
lst.append(words)
lst.sort()
print lst
这是我的输入文件
But soft what light through yonder window breaks
It is the east and Juliet is the sun
Arise fair sun and kill the envious moon
Who is already sick and pale with grief
这就是我希望得到的
['Arise', 'But', 'It', 'Juliet', 'Who', 'already', 'and', 'breaks', 'east', 'envious', 'fair', 'grief', 'is', 'kill', 'light', 'moon', 'pale', 'sick', 'soft', 'sun', 'the', 'through', 'what', 'window', 'with', 'yonder']
答案 0 :(得分:7)
lst.append(words)
在lst
末尾添加一个列表,它不会连接lst
和words
。您需要使用lst.extend(words)
或lst += words
。
此外,您不应该在每次迭代时对列表进行排序,而只是在循环结束时对其进行排序:
lst = []
for line in fh:
lst2 = line.strip()
words = lst2.split()
lst.extend(words)
lst.sort()
print lst
如果您不想重复说话,请使用set
:
st = set()
for line in fh:
lst2 = line.strip()
words = lst2.split()
st.update(words)
lst = list(st)
lst.sort()
print lst
答案 1 :(得分:3)
lst.append(words)
将列表作为成员添加到外部列表中。例如:
lst = []
lst.append(['another','list'])
lst ## [['another','list']]
所以你得到一个嵌套列表。请改用.extend(...)
:
fname = raw_input("Enter file name: ")
fh = open(fname)
lst = list()
for line in fh:
lst2 = line.strip()
words = lst2.split()
lst.extend(words)
lst.sort()
print lst
答案 2 :(得分:2)
line.split()
返回字符串列表。现在,您希望将这些单词与您之前已经累积的字符串列表相关联。当您致电lst.append(words)
时,您只是将单词列表添加到列表中,因此最终会得到一个列表列表。您可能想要的是extend()
,它只是将一个列表的所有元素添加到另一个列表中。
因此,您需要lst.append(words)
而不是lst.extend(words)
。
答案 3 :(得分:0)
问题在于words
是来自拆分的单词数组。当您将words
附加到lst
时,您正在创建一个数组列表,并对其进行排序只会对该列表进行排序。
你想做类似的事情:
for x in words:
lst.append(x)
lst.sort()
我相信
编辑:我已经实现了您的文本文件,以下代码适用于我:
inp=open('test.txt','r')
lst=list()
for line in inp:
tokens=line.split('\n')[0].split() #This is to split away new line characters but shouldnt impact
for x in tokens:
lst.append(x)
lst.sort()
lst