我们一般把四个list、tuple、set、dict叫做容器。
容器是用来存放对象的,它是在内存中开辟的
一,列表(list)
列表是一种线性表,由大量节点组成,每一个节点都可存放数据,
(1) 创建

>>> a = list ()
>>> type(a)
<class 'list'>
>>> b = list([3,5,4,2,5])
>>> type(b)
<class 'list'>
>>> c = [4,3,2]
>>> type(c)
<class 'list'>
>>> d = [3,"ha","xi"]
>>> type(d)
<class 'list'>
>>> e = [range(1,4)]
>>> type(e)
<class 'list'>

(1)len()

>>> list1 = [2,3,6,2,1,3,5,7]
>>> len(list1)
8

(2)通过下标可以访问下标对应的值,并且可以根据下标进行新的赋值
格式:
列表名[下标]
赋值 : 列表名[下标] = 新的值

>>> print(list1[3])
2
>>> list1[4]
1
>>> list1[1] = 9
>>> list1
[2, 9, 6, 2, 1, 3, 5, 7]
>>> list1[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

注:下标不能越界,不然就会报错。
(3)
迭代操作:可以被for循环遍历,若想只取一个数出来,用角标方法

>>> for i in list1:
...     print(i)
...
2
9
6
2
1
3
5
7
>>> for i in range(0,9):
...     print(list1[i])
...
2
9
6
2
1
3
5
7

两个list合并

>>> list2 = [5,4,3,2,"haha","嘻嘻"]
>>> list1 + list2
[2, 9, 6, 2, 1, 3, 5, 7, 5, 4, 3, 2, 'haha', '嘻嘻']

重复:

>>> list3 = [2,3,2,5]*3
>>> list3
[2, 3, 2, 5, 2, 3, 2, 5, 2, 3, 2, 5]

判断元素是否在list列表里

>>> list1
[2, 9, 6, 2, 1, 3, 5, 7, 21]
>>> 9 in list1
True
>>> 10 in list1
False
>>> 10 not in list1
True

可以截取列表一部分数据:

>>> list1
[2, 9, 6, 2, 1, 3, 5, 7, 21]
>>> list1[1:3]=[6,6,6]     #也可替换一部分数据
>>> list1
[2, 6, 6, 6, 2, 1, 3, 5, 7, 21]
>>> list1[1:4]      #[1:4] [1,4)的下标数据
[6, 6, 6]

列表中常用的方法:
格式:
列表名.方法 # .是用来调用某一方法。

>>> list3
[2, 3, 2, 5, 2, 3, 2, 5, 2, 3, 2, 5]

(1)count	统计元素在列表中的个数
>>> list3.count(2)    
6

(2)insert	制定要插入的元素的位置  格式(下标,元素)
>>> list3.insert(3,6)
>>> list3
[2, 3, 2, 6, 5, 2, 3, 2, 5, 2, 3, 2, 5]

(3)pop		通过下标移除元素,注意:默认没有下标时删除最后一个
>>> list3.pop(3)
6
>>> list3
[2, 3, 2, 5, 2, 3, 2, 5, 2, 3, 2, 5]
>>> list3.pop()
5
>>> list3
[2, 3, 2, 5, 2, 3, 2, 5, 2, 3, 2]

(4)copy		浅拷贝list,一定分别出拷贝和引用传递
>>> list4 = list3.copy()
>>> list4
[2, 3, 2, 5, 2, 3, 2, 5, 2, 3, 2, 5]

(5)clear	清空容器
>>> list4.clear()
>>> list4
[]

(6)remove	移除确定的元素,移除出现的第一个元素,,注意:如果列表中不存在该元素,则抛出异常
>>> list3.remove(5)
>>> list3
[2, 3, 2, 2, 3, 2, 5, 2, 3, 2]
 
 (7)reverse	翻转元素的顺序
>>> list3.reverse()
>>> list3
[2, 3, 2, 5, 2, 3, 2, 2, 3, 2]

(8)sort		排序(主要针对数字)
>>> list3.sort()
>>> list3
[2, 2, 2, 2, 2, 2, 3, 3, 3, 5]

(9)extend	合并列表
>>> list6 =[2,6,8,4]
>>> list7 =["xixi"]
>>> list6.extend(list7)
>>> list6
[2, 6, 8, 4, 'xixi']
>>> list7
['xixi']

(10) index	查询元素在列表中第一次出现的下标位置,注意:
				如果列表中不存在该元素,则抛出异常
>>> list6.index(6)
1
>>> list6.index(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 3 is not in list

(11)append	在尾部追加一个新的元素
>>> list6.append(3)
>>> list6
[2, 6, 8, 4, 'xixi', 3]

二 ,集合(set)

(1)定义集合:
>>> s = set()
>>> type(s)
<class 'set'>

>>> s1 = {3,4,2,1,4}
>>> type(s1)
<class 'set'>

>>> s2 = set((3,4,2,1,4))
>>> type(s2)
<class 'set'>

>>> s4 = {}      注:在没有元素的情况下,它属于字典类型
>>> type(s4)
<class 'dict'>

(1)add()

>>> s1.add(10)
>>> s1
{1, 2, 3, 4, 10}

(2)copy
>>> s5 =s1.copy()
>>> s5
{1, 2, 3, 4, 10}
>>> s2
{1, 2, 3, 4}

>>> s6 = {4,5,7,3,2,8}
>>> s6
{2, 3, 4, 5, 7, 8}
>>> s2
{1, 2, 3, 4}

(3)两个集合的差集
>>> s2.difference(s6)
{1}
>>> s6.difference(s2)
{8, 5, 7}
    注差集的顺序不一样,结果就不一样
    
(4)两个集合的交集
>>> s6.intersection(s2)
{2, 3, 4} 

(5)两个集合的并集
>>> s2.union(s6)
{1, 2, 3, 4, 5, 7, 8}

>>> s5
{1, 2, 3, 4, 10}

(6)移除元素,不存在不会报错
>>> s5.remove(2)
>>> s5
{1, 3, 4, 10}

(7)移除元素,如果存在,不存在也不报错
>>> s8 = s5
>>> s9 = s5.copy()

>>> s9
{1, 10, 3, 4}
>>> s8
{1, 3, 4, 10}

>>> s5.discard(4)
>>> s5
{1, 3, 10}
>>> s8
{1, 3, 10}
>>> s9
{1, 10, 3, 4}
 注:
 copy 与 =  区别
 copy的元素,原来的元素改变,不影响copy后的元素
 但= ,就会改变,随着原来的元素一起改变。
      列表也是一样
(8)清空容器
>>> s8.clear()
>>> s8
set()

三,元组(tuple)

元组的定义

>>> t1 = (5,3,7,2,7,8,4,3)
>>> type(t1)
<class 'tuple'>

>>> t2 = ("haha","xixi","你好")
>>> type(t2)
<class 'tuple'>

元组的方法:

(1)count
>>> t1.count(3)
2

(2)index
>>> t1.index(3)
1
注意:
(1)
>>> t1 = (1)
>>> type(t1)
<class 'int'>

>>> t1 = (1,)
>>> type(t1)
<class 'tuple'>
 
 当元组里只有一个元素是,在元素后面加上逗号。用来区分int和元组tuple。

(2)

指向新的元组
>>> t1 = (1,2)
>>> t1 = (1,2,3)
>>> t1
(1, 2, 3)
 
 元组也可以通过下标访问 
>>> t1[1]    
2
>>> t1[1] = 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>

元组元素是固定的:是指不能给一个元组添加,删除,和替换。并不是不能指向新的元组

四,字典

结构为二维表: {}keys:values}
key必须是字符串。
字典的定义:

>>> d = {}
>>> type(d)
<class 'dict'>

>>> d1 =dict()
>>> type(d1)
<class 'dict'>

>>> d4 = {"name":"haha","age":21,"sex":"boy"}

字典里的方法:

(1)clear
(2)copy
(3)items    返回键值对
>>> d3.items()
dict_items([('name', 'zhangsan'), ('age', 23)])
(4)返回所有的values
>>> d3.values()
dict_values(['zhangsan', 23])
(5)返回所有的key
>>> d3.keys()
dict_keys(['name', 'age'])
(6)通过key,删除对应的键值对,注意:如果该键不存在,则抛出异常
>>> d3.pop("age")
23
>>> d3
{'name': 'zhangsan'}

>>> d4
{'name': 'haha', 'age': 21, 'sex': 'boy'}

(7)popitem	# 移除一个键值对,按照LIFO规则 LIFO(后进先出)FIFO(先进先出)
>>> d4.popitem()
('sex', 'boy')
>>> d4
{'name': 'haha', 'age': 21}

(8)get  	# 通过key或者该key对应的值,如果没有这个key,则返回None
>>> d4.get("name")
'haha'
>>> d4.get("sex")