写python已经差不多有三个多月了,因为简洁,越来越喜欢这个"巨莽"了,我相信绝大多数人同样喜欢简洁。
今天第一次记录,是我刚刚再工作上遇到的一个小问题,为了更方便理解,我把问题概括成这样:
我有三百多万条记录,但是里面有重复(里面由数字和数字组成),我想要得到不重复的数据。
这是一个老问题,用c++的话很自然就会用到set,大概写法就是
#include<iostream> #include<set> #include<string> #include<cstdio> using namespace std; int main(){ freopen("record.txt","r",stdin); freopen("uniquerec.txt","w",stdout); set<string> st; string mstr; while(cin>>mstr){ st.insert(mstr); } for(set<string>::iterator itr=st.begin();itr!=st.end();itr++){ cout<<*itr<<endl; } fclose(stdin); fclose(stdout); }
而用python,则是这样的
#!/usr/bin/env python # coding=utf-8 rec=open('record1.txt','r').readlines() uniquerec=open('unique.txt','w') st=set(rec) uniquerec.write(''.join(st))
怎么样?是不是让人十分喜欢?短短几行,包括了读写文件,过滤重复!
为了让不熟悉py的同学明白,我简单说一下用到的。
读写文件就是open(‘文件名字‘,参数[r为读,w为写,a为追加]‘)
用readlines()会返回一个列表
而利用列表lst创建集合则只需要
st=set(lst)
而‘字符串‘.join是十分好用的连接,利用字符串来连接容器内的元素,我用的是空字符,就是直接串连起来。
之后,因为我的文档分开了两个存储,所以需要求并运算。py只需要这么做。
#!/usr/bin/env python # coding=utf-8 rec=open('record1.txt','r').readlines() rec2=open('record2.txt','r').readlines() uniquerec=open('unique.txt','w') st=set(rec)|set(rec2) uniquerec.write(''.join(st))没错,就是 | 用于求并,同理&则是求交 ,-是求差,^是求补。
python的简洁和高效你感受到了吗?
人生苦短,我用python!!