python中set和list的坑。。。

我之前一直傻傻的認爲:set()的作用就是把list中的東西單純的變換了格式

將 [ ] 變成了 { }

其實不然,它去掉了list中的重複元素。。。

 

Python的set類型和其他語言類似,是一個無序不重複元素集,基本功能包括關係測試和消除重複元素。

    如果我們要處理一些數據,需要去除掉重複元素,比如列表a = [5, 2, 5, 1, 4, 3, 4],可以用如下方式實現


 
  1. a = [5, 2, 5, 1, 4, 3, 4]  
  2. print list(set(a)) 

    Python中set集合對象還支持union(聯合[|])、intersection(交[&])、difference(差[-])和sysmmetric difference(對稱差集^)等數學運算。如下:


 
  1. a = set('abracadabra')  
  2. b = set('alacazam')  
  3.  
  4. # a包含且b包含的字符  
  5. print a & b  
  6. print a.intersection(b)  
  7. # a包含或b包含的字符  
  8. print a | b  
  9. print a.union(b)  
  10. # a包含且b不包含的字符  
  11. print a - b  
  12. print a.difference(b)  
  13. # a包含且b不包含的字符和b包含且a不包含的字符  
  14. print a ^ b  
  15. print a.symmetric_difference(b) 

     當然,Python中關於set的操作類型還有很多,這裏就不一一列舉了。如果一個文本中有重複的元素,我們應該如何去除呢,文本內容如下:


 
  1. [root@linuxidc ]# cat done.txt   
  2. linuxidc  
  3. linuxidc  
  4. linuxidc  
  5.  
  6. http://www.linuxidc.com/  
  7. http://www.linuxidc.com/ 

    Python利用set去除重複元素的方式,如下:


 
  1. In [1]: print '\n'.join(set(open('done.txt').read().split('\n')))  
  2.  
  3. linuxidc  
  4. http://www.linuxidc.com/  
  5.  
  6. In [2]: print ''.join(set([x for x in open('done.txt').readlines() if x.strip()!='']))  
  7. linuxidc  
  8. http:///www.linuxidc.com/ 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章