Python_2:容器

什么是容器?

可以存放多个元素的一种数据类型,补充变量的无法存储大量数据的缺陷。

Python提供的容器

- 列表(list)

- 集合(set)

- 元组(tuple)

- 字典(dict)

线性表:

​ 数组:数组是连续内存的结构, python是没有数组

​ 栈:先进后出,后进先出(FILO:first in last out)

​ 队列:先进先出,后进后出(FIFO:first in first out)

​ 列表:
​ 单向链表:(数据|下一个指针地址)

​ 双向链表:(上个指针地址|数据|下一个指针地址)

一、列表(list)

列表是基于双向链表实现的

1.1 定义

  • 直接赋值

    >>> ls1 = [1,2,3,4,5]
    
  • 全局函数 list()

    >>> ls2 = list()
    >>> ls3 = list([2,3,4,5,6])
    

1.2 访问元素

使用下标来访问元素(下标从0开始计),也可以通过下标来修改元素的值

>>> ls1[0]
1
>>> ls3[4]
6
>>> ls1[0] = 2
>>> ls1
[2, 2, 3, 4, 5]

1.3 遍历

#while循环
index = 0
while index < len(ls):
    print(ls[index])
    index += 1
#for循环:
for i in ls:
    print(i)

全局函数 len(容器) # 返回容器的长度

1.4 常见方法

  • append() 向列表尾部追加元素

    >>> ls1
    [2, 2, 3, 4, 5]
    >>> ls1.append(7)
    >>> ls1
    [2, 2, 3, 4, 5, 7]
    
  • insert() 向指定的位置追加元素

    >>> ls1
    [2, 2, 3, 4, 5, 7]
    >>> ls1.insert(1,1)
    >>> ls1
    [2, 1, 2, 3, 4, 5, 7]
    
  • sort() 排序(一般用来排序数字)

    >>> ls1
    [2, 1, 2, 3, 4, 5, 7]
    >>> ls1.sort()
    >>> ls1
    [1, 2, 2, 3, 4, 5, 7]
    
  • index() 查找元素第一次在列表中出现的位置。如果没有这个元素,则抛出异常

    >>> ls1
    [1, 2, 2, 3, 4, 5, 7]
    >>> ls1.index(4)
    4
    >>> ls1.index(7)
    6
    
  • reverse() 将列表元素顺序翻转

    >>> ls1
    [1, 2, 2, 3, 4, 5, 7]
    >>> ls1.reverse()
    >>> ls1
    [7, 5, 4, 3, 2, 2, 1]
    
  • remove() 通过元素来移除元素。若同一个元素存在多次,仅删除顺序排列的第一个。如果元素不存在,则抛出异常

    >>> ls1
    [7, 5, 4, 3, 2, 2, 1]
    >>> ls1.remove(2)
    >>> ls1
    [7, 5, 4, 3, 2, 1]
    
  • count() 统计元素个数

    >>> ls1
    [7, 5, 4, 3, 2, 1]
    >>> ls1.append(4)
    >>> ls1.count(4)
    2
    
  • clear() 清除元素

    >>> ls3
    [2, 3, 4, 5, 6]
    >>> ls3.clear()
    >>> ls3
    []
    
  • copy() 浅拷贝对象,是在堆内存中进行对象拷贝的.注意和赋值的区别

    >>> ls1
    [7, 5, 4, 3, 2, 1, 4]
    >>> ls2
    []
    >>> ls3
    []
    
    >>> ls2 = ls1.copy()
    >>> ls3 = ls1
    >>> ls2
    [7, 5, 4, 3, 2, 1, 4]
    >>> ls3
    [7, 5, 4, 3, 2, 1, 4]
    
    #浅拷贝和赋值的区别:
    >>> ls1.remove(3)
    >>> ls1
    [7, 5, 4, 2, 1, 4]
    >>> ls2
    [7, 5, 4, 3, 2, 1, 4]
    >>> ls3
    [7, 5, 4, 2, 1, 4]
    
  • extend 合并列表

    >>> ls1
    [7, 5, 4, 2, 1, 4]
    >>> ls2
    [7, 5, 4, 3, 2, 1, 4]
    >>> ls1.extend(ls2)
    >>> ls1
    [7, 5, 4, 2, 1, 4, 7, 5, 4, 3, 2, 1, 4]
    
  • pop() 删除最后元素,并返回这个元素

    >>> ls1
    [7, 5, 4, 2, 1, 4, 7, 5, 4, 3, 2, 1, 4]
    >>> ls1.pop()
    4
    >>> ls1
    [7, 5, 4, 2, 1, 4, 7, 5, 4, 3, 2, 1]
    

二、集合(set)

集合的底层是基于哈希表(hash)实现的。所以它也具有哈希表的特点:每个元素唯一(无重复)、无序

2.1 定义

  • 直接赋值

    >>> s1 = {1,2,3,4}		# {}至少要有一个元素,此时才是集合
    >>> s2 = {}				# 如果使用空的{}来创建一个对象,该对象是字典,并不是集合
    >>> type(s1)
    <class 'set'>
    >>> type(s2)
    <class 'dict'>
    
  • 全局函数:set()

    >>> s3 = set()				# 使用全局函数set来创建一个集合
    >>> s4 = set({2,3,4,5})		# 创建集合,并赋值
    >>> type(s3)
    <class 'set'>
    

2.2 常见方法

  • clear()

    >>> s1
    {1, 2, 3, 4}
    >>> s1.clear()
    >>> s1
    set()
    
  • remove()

    >>> s1
    {1, 2, 3, 4}
    >>> s1.remove(2)
    >>> s1
    {1, 3, 4}
    
  • copy()

    >>> s1
    {1, 3, 4}
    >>> s2
    {}
    >>> s2 = s1.copy()
    >>> s2
    {1, 3, 4}
    
  • add():增加元素

    >>> s1
    {1, 3, 4}
    >>> s1.add(7)
    >>> s1
    {1, 3, 4, 7}
    
  • difference():差集

    >>> s1
    {1, 3, 4, 7}
    >>> s2
    {1, 3, 4}
    >>> s2.difference(s1)	#s2相较于s1的差集
    set()
    >>> s1.difference(s2)	#s1相较于s2的差集
    {7}
    
  • intersection():交集

    >>> s1
    {1, 3, 4, 7}
    >>> s2
    {1, 3, 4}
    >>> s1.intersection(s2)
    {1, 3, 4}
    >>> s2.intersection(s1)
    {1, 3, 4}
    
  • union():并集

    >>> s1
    {1, 3, 4, 7}
    >>> s2
    {1, 3, 4, 9, 'wang'}
    >>> s1.union(s2)
    {1, 3, 4, 7, 9, 'wang'}
    >>> s1
    {1, 3, 4, 7}
    >>> s2
    {1, 3, 4, 9, 'wang'}
    
  • update():先求并集,再更新集合

    >>> s1
    {1, 3, 4, 7}
    >>> s2
    {1, 3, 4, 9, 'wang'}
    >>> s1.update(s2)
    >>> s1
    {1, 3, 4, 7, 9, 'wang'}
    >>> s2
    {1, 3, 4, 9, 'wang'}
    
  • discard():移除元素,但是如果不存在,则不做任何操作

    >>> s1
    {1, 3, 4, 7, 9, 'wang'}
    >>> s1.discard(7)
    >>> s1
    {1, 3, 4, 9, 'wang'}
    

三、元组(tuple)

对应其他语言中的常量、枚举类型

元组是一个不可变类型。元组中的元素一旦定义,则无法改变

注意:当元组内部的元素是可变类型时,那么元组就可变了(也仅只能改变这个可变类型中的值)

3.1 定义

  • 直接赋值

    >>> t1 = (1,2,3,[2,3,4])
    #注意:如果使用赋值类型定义元组且只有一个元素,切记添加,分割。否则该()被视为数学运算中的提升优先级符号。
    >>> t4 = (5)
    >>> type(t4)
    <class 'int'>
    >>> t5 = (7,)
    >>> type(t5)
    <class 'tuple'>
    
  • 全局函数:tuple()

    >>> t2 = tuple()
    >>> t3 = tuple((2,3,4))
    

3.2 元素访问

使用下标来访问元素(下标从0开始计),也可以通过下标来修改可变类型元素的值

>>> t
(1, 2, 3, [2, 3, 4])
>>> t[2]
3
>>> t[3]
[2, 3, 4]
>>> t[3].append(9)
>>> t
(1, 2, 3, [2, 3, 4, 9])

3.3 常见方法

  • index()

    >>> t
    (1, 2, 3, [2, 3, 4, 9])
    >>> t.index(3)
    2
    
  • count()

    (11, 22, 3, 4, 5, 44, 11, 1, 22)
    >>> t.count(22)
    2
    

四、字典(dict)

键值对形式存储 key:value

4.1 定义

  • 直接赋值

    >>> d1 = {"name":"wang","age":18,"gender":"男"}
    
  • 全局函数:dict()

    >>> d2 = dict({"name":"qin","age":16,"gender":"女"})
    

4.2 元素访问

通过key来访问对应的值

  • 字典对象[key]:返回key对应的值,如果没有,抛出异常

    {'name': 'wang', 'age': 18, 'gender': '男'}
    >>> d1["name"]
    'wang'
    
  • 修改:字典对象[key] = 新值

    >>> d1
    {'name': 'wang', 'age': 18, 'gender': '男'}
    >>> d1["name"] = "chang"
    >>> d1
    {'name': 'chang', 'age': 18, 'gender': '男'}
    
  • 添加新的键值对:字典对象[新key] = 新值

    >>> d1
    {'name': 'chang', 'age': 18, 'gender': '男'}
    >>> d1["hobbies"] = "跑步"
    >>> d1
    {'name': 'chang', 'age': 18, 'gender': '男', 'hobbies': '跑步'}
    

4.3 常见方法

  • clear()

    >>> d3
    {'name': 'chang', 'age': 18, 'gender': '男', 'hobbies': '跑步'}
    >>> d3.clear()
    >>> d3
    {}
    
  • copy()

    >>> d1
    {'name': 'chang', 'age': 18, 'gender': '男', 'hobbies': '跑步'}
    >>> d3
    {}
    >>> d3 = d1.copy()
    >>> d3
    {'name': 'chang', 'age': 18, 'gender': '男', 'hobbies': '跑步'}
    
  • get():和字典对象[key]类似,获取键对应值,注意,如果没有该键,返回None

    >>> d3
    {'name': 'chang', 'age': 18, 'gender': '男', 'hobbies': '跑步'}
    >>> d3.get("hobbies")
    '跑步'
    
  • keys():返回所有的键

    >>> d3.keys()
    dict_keys(['name', 'age', 'gender', 'hobbies'])
    
  • values():返回所有的值

    >>> d3.values()
    dict_values(['chang', 18, '男', '跑步'])
    
  • items():返回键值对

    >>> d3
    {'name': 'chang', 'age': 18, 'gender': '男', 'hobbies': '跑步'}
    >>> d3.items()
    dict_items([('name', 'chang'), ('age', 18), ('gender', '男'), ('hobbies', '跑步')])
    
  • pop(key):通过key删除键值对

    >>> d3
    {'name': 'chang', 'age': 18, 'gender': '男', 'hobbies': '跑步'}
    >>> d3.pop("age")
    18
    >>> d3
    {'name': 'chang', 'gender': '男', 'hobbies': '跑步'}
    
  • popitem():移除一个键值对,移除的规则是LIFO(last in first out)

    >>> d3
    {'name': 'chang', 'gender': '男', 'hobbies': '跑步'}
    >>> d3.popitem()
    ('hobbies', '跑步')
    >>> d3
    {'name': 'chang', 'gender': '男'}
    

4.4 遍历

for k in d.keys():
	print(k, d.get(k))

for k in d:
	print(k, d[k])

for k,v in d.items():
	print(k, v)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值