手拿把掐 python 新手进阶第三章

此文介绍并详细介绍了python的列表,元组,和字典 的定义和详细用法,绝对干货

列表

列表的定义:

  • List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组
  • 列表用 [] 定义,数据 之间使用 , 分隔
  • 列表中的项目 可以改变
  • 列表的 索引 从 0 开始
    • 索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标

注意:从列表中取值时,如果 超出索引范围,程序会报错

演示:

# 定义一个列表alist,一个列表中可以由字符串,可以有整数,也可以有子列表
>>> alist = [10, 20, 'tom','alice', [1,2]]
>>> len(alist)  # 使用函数len(),可以查看列表的长度,即以逗号分割的元素的多少
5
# 列表也是以下标取元素,默认开始下标为0,取出列表alist中的第一个元素,为10
>>> alist[0]
10
>>> alist[-1]  # 取出列表alist中,倒数第一个元素,为子列表[1,2]
[1, 2]
>>> alist[2:4]  # 取出列表alist中,第二个到第四个元素,下标为4的元素不包含
['tom', 'alice']
>>> 'tom' in alist  # 字符串'tom'是否在列表alist范围之内
True
# 列表的拼接和重新赋值
>>> alist  # 查看列表alist中的值
>>> type(alist)  # 查看列表alist的数据类型,为list类型
<class 'list'>
>>> type(100)  # 查看100的数据类型,为int类型
<class 'int'>
>>> alist + 100  # 列表在拼接时,必须是相同类型【均为list类型】,才可以完成拼接
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
>>> alist + [100]  # 完成拼接,只是输出拼接后的结果,不会改变列表alist的组成
>>> alist[-1]  # 查看列表alist最后一个元素的值
[1,2]
>>> alist[-1] = 100  # 修改列表alist最后一个元素的值为100
>>> alist[-1]  # 查看列表alist最后一个元素的值,验证结果
100
>>> alist  # 查看列表alist中的所有元素
列表操作:


	• 使用 in 或 not in 判断成员关系
	• 使用 append 方法向列表中追加元素(常用)
>>> 10 in alist	  # 判断10, 是否在列表alist范围之内,为真
True
>>> 'alice' not in alist  # 判断alice, 是否不在列表alist范围之内,为假
False
>>> 'tom' not in alist  # 判断字符串tom, 是否不在列表alist范围之内,为假
False
# alist.<Tab><Tab>可以显示alist可以使用的方法
>>> alist.append(200)  # 向列表alist中,追加一个元素200
>>> alist

元组

元组的定义:

  • Tuple(元组)与列表类似,不同之处在于元组的 元素不能修改
    • 元组 表示多个元素组成的序列
    • 元组 在 Python 开发中,有特定的应用场景
  • 用于存储 一串 信息,数据 之间使用 , 分隔
  • 元组用 () 定义
  • 元组的 索引 从 0 开始
    • 索引 就是数据在 元组 中的位置编号
  • 元组中 只包含一个元素 时,需要 在元素后面添加逗号
  • 类似于成绩排名,不可修改

演示:


>>> atuple = (1,2,'tom','alice')  # 定义一个元组atuple
>>> len(atuple)  # 使用函数len() 统计计算元组的长度,即元素的多少
4
>>> atuple[2:]  # 取出元组atuple中,下标为2及其以后的元素,初始下标也是 0
>>> atuple + (100,200)  # 元组拼接,元组本身不会发生变化
>>> 'tom' in atuple  # 字符串tom是否在元组atuple中,为真
# 元组是静态列表,一旦定义则不可被修改,元组中的元素不能重新赋值
>>> atuple[0] = 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

字典

字典的定义:

python中的数据类型是dictonart

  • dictionary(字典) 是 除列表以外 Python 之中 最灵活 的数据类型
  • 字典同样可以用来 存储多个数据
    • 通常用于存储 描述一个 物体 的相关信息
  • 和列表的区别
    • 列表 是 有序 的对象集合
    • 字典 是 无序 的对象集合
  • 字典用 {} 定义
  • 字典使用 键值对 存储数据,键值对之间使用 , 分隔
    • 键 key 是索引
    • 值 value 是数据
    • 键 和 值 之间使用 : 分隔
    • 键必须是唯一的
    • 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组

演示:

>>> adict = {'zhang': 123, 'san': 246}  # 定义一个字典变量adict
>>> adict  # 查看字典adict中的所有元素
{'zhang': 123, 'san': 246}
# 只能判断键,是否在字典adict范围内,不能判断值
>>> 'zhang' in adict  # 键zhang,在字典adict范围内
True
>>> adict['san']  #取出键san对应的页码,为246
246
>>> adict['san'] = 247  # 如果键san已经在字典中存在,则修改san对应的页码为247
>>> adict['san']
22
>>> adict['zhao'] = 400		# 如果键zhao在字典中不存在,则表示在字典中新增
>>> adict							#查看字典adict中的所有元素,新增键email
{'zhang': 123, 'san': 247, 'zhao': 400}
# 字典是通过键,来取出对应的值,不能用下标取值,因为字典是没有顺序的
>>> adict[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 0

数据类型比较

按存储模型分类:

  • 标量类型:数值、字符串
  • 容器类型:列表、元组、字典

按更新模型分类:

  • 可变类型:列表、字典
  • 不可变类型:数字、字符串、元组
演示 1
# 数据存储方式:演示一
>>> py_str = 'python'  # 定义变量py_str, 值为'python'
>>> py_str[0]  # 可以查看变量py_str下标为0的字符
'p'
>>> py_str[0] = 'P'  # 修改变量py_str下标为0的字符时,不支持,无法修改
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> py_str = 'Python'  # 给变量py_str 整体赋值时,赋值成功,


总结:

  • 定义变量时,系统会在内存中开辟一个固定长度的空间,用于存储变量的值 'python',py_str 是这个空间的映射,这是一个整体,无法修改变量中的单个字符;

  • 重新变量 py_str 赋值时,系统会在内存中重新开辟一个固定长度的空间,存储新的值 'Python',系统会将 py_str 映射指向新的空间,而不是在原来的基础上进行修改;

演示 2
>>> alist = [100,20,30]		# 定义列表alist, 值为[100,20,30]
>>> blist = alist			# 将列表alist赋值给blist
>>> blist					# 查看列表blist中的所有元素
>>> blist.append(200)		# 向列表blist中追加一个元素
>>> blist					# 查看列表blist中的所有元素
[100, 20, 30, 200]
# 查看列表alist中的所有元素,发现并没有给alist赋值,而alist的值也发生变化,原因如下图所示:
>>> alist
[100, 20, 30, 200]

总结:

  • 当我们执行 blist = alist 时,实际上是让 alist 和 blist 同时指向了一个数据存储空间;
  • 当修改 blist 时,数据存储空间被修改了,而 alist 也指向同一个数据存储空间,所有 alist 的值也发生改变;
# 通过id() 验证 alist 和 blist 同时指向同一个存储空间
>>> id(alist)
140320705670024
>>> id(blist)
140320705670024
演示 3
# 创建列表clist, 修改列表clist时,列表alist的值不会发生改变 
>>> clist = alist[:]  # 重新定义一个列表,使用切片方式,将alist的值赋值给clist
>>> id(clist)  # 查看clist和alist的id值,不相同,它们指向不同的存储空间
140320705692680
>>> id(alist)
140320705670024
>>> clist.append(50)  # 向列表clist后追加一个元素
# 查看列表clist和列表alist,值不相同,原理如下图所示:
>>> clist
[100, 20, 30, 200, 50]
>>> alist
[100, 20, 30, 200]

总结:

  • 当我们执行 clist = alist[:] 时,实际上是重新开辟了一个新数据存储空间,存储 alist 中的数据,然后让 clist 指向新的存储空间;
  • 所以列表 clist 的修改不会影响列表 alist 中的值;

按访问模型分类:

  • 直接访问:数字
  • 顺序访问:字符串、列表、元组
  • 映射访问:字典

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值