与Python中的split函数混淆

时间:2015-10-29 16:26:37

标签: python

我正在尝试按字母顺序对文件中的单词进行排序。然而,程序根据他们的第一句话对行而不是单词进行排序。在这里。

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'] 

4 个答案:

答案 0 :(得分:7)

lst.append(words)lst末尾添加一个列表,它不会连接lstwords。您需要使用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