2015-01-21 104 views
0

我是一个新手,我写了一个tokenize函数,它基本上接受一个由句子组成的txt文件,并根据空格和标点拆分它们。这里的东西是它给了我一个父列表中的子列表的输出。分割python列表

我的代码:

def tokenize(document) 
    file = open("document.txt") 
    text = file.read() 
    hey = text.lower() 
    words = re.split(r'\s\s+', hey) 
    print [re.findall(r'\w+', b) for b in words] 

我的输出:

[['what', 's', 'did', 'the', 'little', 'boy', 'tell', 'the', 'game', 'eggs', 'warden'], ['his', 'dad', 'was', 'warden', 'in', 'the', 'kitchen', 'poaching', 'eggs']] 

所需的输出:

['what', 's', 'did', 'the', 'little', 'boy', 'tell', 'the', 'game', 'eggs', 'warden']['his', 'dad', 'was', 'warden', 'in', 'the', 'kitchen', 'poaching', 'eggs'] 

如何删除父列表中的出我的输出?我需要在代码中进行哪些更改才能删除外部列表括号?

+1

为什么要取出外支架?你有一个列表子列表。 – 2015-01-21 06:51:39

+0

我不希望子列表实际出现在我的输出中。 – Wolf 2015-01-21 06:53:06

+0

然后你会得到一个元组(用'()')。你是否试图以特定的方式打印出来? – 2015-01-21 06:53:35

回答

0

这应该工作

print ','.join([re.findall(r'\w+', b) for b in words]) 
+0

不,它不按预期方式工作:/ – Wolf 2015-01-21 06:57:21

2

我希望他们作为个人名单

Python中的函数只能返回一个值。如果你想返回两个东西(例如,对于你的情况,有两个单词列表),你必须返回一个对象,它可以包含两个东西,像列表,元组,字典。

不要混淆你想怎么打印输出对什么是对象返回

要简单地打印清单:

for b in words: 
    print(re.findall(r'\w+', b)) 

如果你这样做,那么你的方法不返回任何东西(它实际上返回None)。

要返回两个名单:

return [re.findall(r'\w+', b) for b in words] 

然后打电话给你的方法是这样的:

word_lists = tokenize(document) 
for word_list in word_lists: 
    print(word_list) 
0

我有一个例子,我的猜测是不是从你的问题太大的不同..

其中我只占用列表的某个部分。

>>> a = [['sa', 'bbb', 'ccc'], ['dad', 'des', 'kkk']] 
>>> 
>>> print a[0], a[1] 
['sa', 'bbb', 'ccc'] ['dad', 'des', 'kkk'] 
>>>