最近使用一段python来写程序,留下一些记录,方便以事查看。
1.list内存消耗
list是python的苦工,很好用,做小数据处理时很好用,但是list耗内存。当然几百个是没有什么影响的。我尝试过用list存取文件内容。这个文件的内容比较特殊,每一行的文本不超过20个字符,但是大约10万行。文件大小是20M。我用一个list存整个文件内容,内在消耗大约20M。符合常理。但是我用list.split(),分行之后,耗了200M内存,我猜测是因为list封装C++代码,虚函数比较多,导致内存消耗巨大。
2.list对象使用
有时候为了方便的建立一个固定长度list,使用类似于
a = [[]]*100 # a中所有的[]指向同一个对象
的代码,逻辑没错,但实际出错。这种情况,最好用a = []
for i in range(100):
a.append([]) # 保证每个list不同
3. lsit 的排序
list 支持 list.sort(key, reverse),这个排序变得很简单。key参数指定了哪些数值做为排序基准。如下例:
def Tcmp(t):
return t[1] # 拿第一个数作为比较基准
a = [(5,6),(3,4),(1,2)]
a.sort(key=Tcmp)
print a # [(1, 2), (3, 4), (5, 6)]
4.PyQt4.QString
dialog = QtGui.QFileDialog()
dialog.setDirectory('D:/')
dialog.setFileMode(QtGui.QFileDialog.DirectoryOnly)
print dialog.getExistingDirectory() # QtCore.QString对象,直接当python的str处理会意想不到的bug,而且很难找出来
print str(dialog.getExistingDirectory()) #正确用法