老王python之基本数据结构——元组和集合

老王python之基本数据结构——元组和集合

一、元组

1、元组的特点

  • 有序的集合
  • 通过偏移来取数据
>>> a = (1,2,3)
>>> a[1:3]
(2, 3)
  • 属于不可变的对象,不能在原地来修改数据,没有排序、修改等操作要想进行修改等操作的话,可以先转换成列表,修改数据之后,再用tuple()方法把它转换成元组

2、元组存在的意义

有了列表为什么还需要有元组?
元组不可变的好处:保证数据的安全,比如我们传给一个不熟悉的方法或者数据接口,确保方法或者数据接口不会改变我们的数据从而导致程序问题。


二、集合

集合没有顺序的概念,所以不能用切片和索引操作

1、创建集合

  • 可变集合:set()
>>> a = set('abc')
>>> a
set(['a', 'c', 'b'])
>>> type(a)
<type 'set'>
  • 不可变集合:frozenset()

查看一个对象是否是可迭代的,可以赋值之后使用python内置函数dir()查看它的方法里面有没有__iter__这个方法,有的话代表可迭代,没有的话代表不可迭代

2、集合的添加操作

  • #### 2.1 add方法
    把传入的对象作为一个整体来进行添加
>>> a
set(['a', 'c', 'b'])
>>> a.add('python')
>>> a
set(['a', 'python', 'c', 'b'])
  • #### 2.2 update方法
    把传入的对象的每一个元素都分别进行添加
>>> a
set(['a', 'python', 'c', 'b'])
>>> a.update('python')
>>> a
set(['a', 'c', 'b', 'python', 'h', 'o', 'n', 'p', 't', 'y'])

3、集合的删除操作

  • #### remove方法
    删除集合中存在的元素,若输入的是不存在的元素,则抛出异常
>>> a
set(['a', 'c', 'b', 'python', 'h', 'o', 'n', 'p', 't', 'y'])
>>> a.remove('python')
>>> a
set(['a', 'c', 'b', 'h', 'o', 'n', 'p', 't', 'y'])
>>> a.remove(m'')
  File "<stdin>", line 1
    a.remove(m'')
               ^
SyntaxError: invalid syntax

4、集合的成员关系

  • #### in 和 not in
    和list以及tuple类似,查询某个元素是否再集合里面如果是用in来判断的话,在返回True,不在返回Falsse;用not in判断的话,则刚好相反

5、集合的交集、并集、差集

交集、并集和差集的概念和数学中的概念相同
- #### 交集: &

>>> a = set('abcde')
>>> b = set('cdefg')
>>> a & b
set(['c', 'e', 'd'])
  • #### 并集: |
>>> a = set('abcde')
>>> b = set('cdefg')
>>> a | b
set(['a', 'c', 'b', 'e', 'd', 'g', 'f'])
  • #### 差集: -
    a - b 表示集合a中拥有而b中没有的元素构成的集合
>>> a = set('abcde')
>>> b = set('cdefg')
>>> a - b
set(['a', 'b'])

5、集合的去重功能

>>> a = [1,2,3]
>>> a.append(1)
>>> a.append(3)
>>> a
[1, 2, 3, 1, 3]
>>> set(a)        #去除了重复的元素
set([1, 2, 3])
>>> list(set(a))
[1, 2, 3]

前面使用的示例都是可变集合set(),下面对不可变集合做增加和删除,查看效果

>>> a = frozenset('123')
>>> a
frozenset(['1', '3', '2'])
>>> a.add('python')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
>>> a.remove(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'remove'

猜你喜欢

转载自blog.csdn.net/lcl_xiaowugui/article/details/80764992