记住一个原则在python中能简单就做到最简单。
这是修改后的代码:
sample= eval(open(Config.trainSample).read())
这是修改前的具有相同含义的代码:
f=open(Config.trainSample,'r').readlines()
s=f[0]
count=0
li=re.findall(r'\[(?P<tt>.*?)]',s,re.DOTALL)
for x in li:
t=[]
for y in x.split(','):
t.append(int(eval(y)))
result.append(t)
先别理这个实现的功能是什么但是通过这样两端代码就可以发现python的优势(如果你发现的话)。
更重要的一点是前一段代码所用的实现功能是python2.0被加入的列表解析、这样已经比后一段代码提高了不少的效率。
生成器表达式是列表解析的一个扩展,这是python2.4时加入的,与列表解析器非常相似而且它们的基本语法相同。
主要是一个内存使用更友好的结构。
我们可以这样写
[x for x in obj if something] #列表返回
或者
(x for x in obj if something) #generator返回
说白了就是一个是【】号,一个是()号。但是在实现是却有很大的不同。
从这里可以看出,它不像列表一样,当遇到很大的数据时必须创建一个很大的列表来存放东东,而生成器表达式就好像是一个懒惰的列表解析。
速度是大大的提高,大家可以用用试试!!