Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167757
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-13 17:05
文章分类

全部博文(31)

文章存档

2016年(11)

2015年(20)

我的朋友

分类: LINUX

2016-01-16 21:38:40


    集合是由序列构建的,它们主要用于检查成员资格。
        集合分类:可变集合、不可变集合。
            可变集合(set):可以添加删除元素,非可哈希的、不能作字典的键,也不能做其他集合的元素。
            不可变集合(frozenset):与上面恰恰相反。
1. 创建集合

  1. In [1]: l1 = ['a','b','c']
  2. In [2]: se = set(l1)
  3. In [3]: se
  4. Out[3]: set(['a', 'c', 'b'])
  5. In [8]: t = frozenset('python')
  6. In [9]: print t
  7. frozenset(['h', 'o', 'n', 'p', 't', 'y'])
2. 访问集合
    由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in/not in 来访问或判断集合元素

  1. In [10]: t = set('python')
  2. In [11]: 'p' in t
  3. Out[11]: True
  4. In [12]: 'a' in t
  5. Out[12]: False
3. 更新集合
    可使用内建方法来更新:s.add()  s.update()  s.remove()
    注意:只有可变集合(set)才能更新

  1. In [13]: s = set('abc')
  2. In [14]: p = frozenset('python')
  3. In [15]: p.add(0)
  4. ---------------------------------------------------------------------------
  5. AttributeError Traceback (most recent call last)
  6. <ipython-input-15-c9e7b5808c50> in <module>()
  7. ----> 1 p.add(0)
  8. AttributeError: 'frozenset' object has no attribute 'add'
  9. In [16]: s.add(0)
  10. In [17]: s
  11. Out[17]: set(['a', 0, 'c', 'b'])
  12. In [18]: s.update('MM')                    # 修改可变集合
  13. In [19]: s
  14. Out[19]: set(['a', 0, 'c', 'b', 'M'])
  15. In [20]: s.remove(0)                    # 删除元素
  16. In [21]: s
  17. Out[21]: set(['a', 'c', 'b', 'M'])
4. 集合类型操作符
    (1)in, not in
    (2)集合等价与不等价 ( ==, !=)
    (3)子集和超集

  1. In [22]: set('abc') < set('abcd')
  2. Out[22]: True

  3. In [23]: set('xyz') > set('x')
  4. Out[23]: True
    (4)联合(|)

  1. In [24]: a = set('book')

  2. In [25]: b = set('ship')

  3. In [26]: a|b
  4. Out[26]: set(['p', 's', 'b', 'i', 'h', 'k', 'o'])
    (5)交集(&)

  1. In [27]: a = set('abc')

  2. In [28]: b = set('cde')

  3. In [29]: a & b
  4. Out[29]: set(['c'])
    (6)差补(-)

  1. In [41]: a = set('123')

  2. In [42]: b = set('345')

  3. In [43]: a - b
  4. Out[43]: set(['1', '2'])

  5. In [44]: b - a
  6. Out[44]: set(['5', '4'])
    (7)对称差分(^)

  1. In [45]: a = set('123')

  2. In [46]: b = set('345')

  3. In [47]: a ^ b
  4. Out[47]: set(['1', '2', '5', '4'])

  5. In [48]: b ^ a
  6. Out[48]: set(['1', '2', '5', '4'])
    (8)集合之间 and 和 or

  1. In [49]: a
  2. Out[49]: set(['1', '3', '2'])

  3. In [50]: b
  4. Out[50]: set(['3', '5', '4'])

  5. In [51]: a and b                
  6. Out[51]: set(['3', '5', '4'])    # a and b 取 b

  7. In [52]: a or b
  8. Out[52]: set(['1', '3', '2'])    # a or b 取 a
    应用:
        最简单取重方式:

  1. In [53]: l1 = [1,2,3,4,1,2,3]

  2. In [54]: print l1
  3. [1, 2, 3, 4, 1, 2, 3]

  4. In [55]: print list(set(l1))
  5. [1, 2, 3, 4]
阅读(1359) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~