python学习笔记第八章容器

数据容器

一、什么是数据容器

基本介绍

1.数据容器是一种数据类型,有些地方也简称为容器/collections

2.数据容器可以存放多个数据,每一个数据也被称为一个元素

3.存放的数据/元素可以是任意类型

4.简单的说,数据容器就是一种可以存放多个数据/元素的数据类型

分类

  • 列表(list)

  • 元组(tuple)

  • 字符串(str)

  • 集合(set)

  • 字典(dict)

二、列表

基本介绍

1.列表可以存放多个不同类型数据,即:列表就是一列数据(多个数据)

2.列表也是一种数据类型

列表的定义

创建一个列表,只要用逗号分隔的不同的数据项使用方括号括起来即可

list1 = [100,200,300,400,500]
list2 = ['red','blue','green']

列表内存图

在这里插入图片描述

列表的使用

列表名[索引]

索引是从0开始计算的

列表的遍历

将列表的每个元素依次取出,进行处理的操作

注意事项和细节

1.如果我们需要一个空列表,可以通过[],或者list()方式来定义

2.列表的元素可以有多个,而且数据类型没有限制,允许有重复元素,并且是有序的

3.列表的索引/下标是从0开始的

4.列表索引必须在指定范围内使用,否则报:IndexError:list index out of range

5.索引也可以从尾部开始,最后一个元素的索引为-1,往前一位为-2,以此类推

在这里插入图片描述

6.通过列表[索引]=新值,对数据进行更新,使用列表.append(值)方法来添加元素,使用del语句来删除列表的元素,注意不能超出有效索引范围

list_a.append("123")
del list_a[1]

7.列表是可变序列(要注意其使用特点)

# 列表的元素是可以修改的,修改后,列表变量指向地址不变,只是数据内容变化
list1 = [1, 2.1, 4.2]
print(f"list: {list1} 地址:{id(list1)}")
list1[2] = 5.6	# 可以修改
print(f"list: {list1} 地址:{id(list1)}")

在这里插入图片描述

列表生成式

列表生成式就是生成列表的公式

基本语法
[列表元素的表达式 for 自定义变量 in 可迭代对象]

# 列表生成式
list1 = [ele * 2 for ele in range(1, 8)]	# [2, 4, 6, 8, 10, 12, 14]
print(list1)

list2 = [ele + ele for ele in "李奕"]	# ['李李', '奕奕']
print(list2)

三、元组

元组是不可变序列,通常用于储存异构数据的多项集(例如由enumerate()内置函数产生的二元组)。元组也被用于需要同构数据的不可变序列的情况(例如允许存储到set或dict的实例)

基本介绍

1.元组(tuple)可以存放多个不同类型元素

tuple不可变是指当你创建了tuple的时候,他就不能改变了,也就是说它没有append()、insert()这样的方法,但它也有获取某个索引值的方法,但是不能重新赋值。

2.元组也是一种数据类型

元组的定义

创建一个元组,只要把逗号分隔的不同的数据项,使用圆括号括起来即可

tuple_a = (100,200,300,400,500)
tuple_b = ('red','green','blue','yellow','white','black')

元组的使用

元组使用语法
元组名[索引]

注意事项和细节

1.如果我们需要一个空元组,可以通过(),或者tuple()方法来定义

tuple_a = ()
tuple_b = tuple()

2.元组的元素可以有多个,而且数据类型没有限制(甚至可以嵌套元组),允许有重复元素,并且是有序的

3.元组是不可变序列(要注意其使用特点)

# 元组的元素是不能修改的
tuple_e = (1,2.1,'hello')
# tuple_e = 'python' # 不能修改

4.可以修改元组内list的内容(包括修改、增加、删除等)

tuple_f = (1, 2.1, 'hello', ['jack', 'python', 'tom'])
# 修改
tuple_f[3][0] = 'sss' # 可以修改,改变的是列表的元素
# tuple_f[3] = [10, 20]  # 不可以操作,这样就改变的元组的元素

5.索引也可以从尾部开始,最后一个元素的索引为-1,往前一位为-2

6.定义只有一个元素的元组,需要带上逗号

tuple_h = (100,)
# tuple_h = (100) # python 会认为这样的tuple_h是一个int类型

7.有了列表,为什么还要提供元组这样的数据类型

  • 在项目中,尤其是多线程环境中,有经验的程序员会考虑使用不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误;另一方面一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。可以方便的被共享访问)。所以,如果不需要对元素进行增删改的情况下,可以考虑使用元组。
  • 元组在创建时间和占用的空间上面都优于列表
  • 元组能够对不需要修改的数据写保护

四、字符串

基本介绍

1.在python中处理文本数据是使用str对象,也称为字符串。字符串是由Unicode码位构成的不可变序列

  • Unicode码是一种字符编码
  • ord()返回单个字符对应的Unicode编码值

2.字符串字面值有三种写法

  • 单引号:‘允许包含有"双"引号’
  • 双引号:“允许嵌入’单’引号”
  • 三重引导:‘’‘三重单引号’‘’,“”“三重双引号”“”,使用三重引号的字符串可以跨越多行——其中所有的空白字符都将包含在该字符串字面值中

3.字符串是字符的容器,一个字符串可以存放多个字符

字符串比较

1.运算符:>,>=,<,<=,==,!=

2.比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较

3.比较原理:两个字符进行比较时,比较的是其ordinal value(原始值/码值),调用内置函数ord()可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符

注意事项

字符串是不可变序列,不能修改

在python中,字符串长度没有固定的限制,取决于计算机内存大小

五、切片

基本介绍

1.什么是切片:从一个序列中,取出一个子序列,在实际开发中,程序员经常对序列进行切片操作

2.什么是序列:序列是指,内容连续、有序,可使用索引的一类数据容器

3.列表、元组、字符串均可视为序列

基本语法

序列[起始索引:结束索引:步长]

1.表示从序列中,从指定的起始索引开始,按照指定的步长,依次取出元素,到指定结束索引为止,截取到一个新的序列

2.切片操作是前闭后开,也就是[起始索引:结束索引),即截取的子序列,包括起始索引,但是不包括结束索引的部分

3.步长表示,依次取出元素的间隔

  • 步长为1:一个一个的取出元素
  • 步长为2:每次跳过一个元素取出
  • 步长为N:每次跳过N-1个元素取出

注意事项和使用细节

1.起始索引不写,默认为零;结束索引不写,默认为截取到结尾;步长如果不写,默认为1。

2.步长为负数,表示反向取,同时注意起始索引和结束索引也要反向标记。

3.切片操作并不会影响原序列,而是返回了一个序列。

六、集合

基本介绍

1.python支持集合这种数据类型,集合是由不重复元素组成的无序容器。

  • 不重复元素:简单的说就是集合中不会有相同的元素
  • 无序:集合中元素取出的顺序,和你定义时元素顺序并不能保证一致

2.集合对象支持合集、交集、差集等数学运算

3.既然有列表、元组这些数据容器,为什么还提供集合这样的数据类型

​ 在项目中,我们可能有这样的需求:需要记录一些数据,而这些数据必须保证是不重复的,而且数据的顺序并没有要求,我们就可以考虑使用集合。

​ 列表、元组的元素是可以重复,且有序。

集合的定义

创建一个集合,只要用逗号分隔的不同的数据项,并使用{}括起来即可

注意事项和使用细节

1.集合是由不重复元素组成的无序容器

2.集合不支持索引

3.由于集合不支持索引,所以对集合进行遍历不支持while,只支持for

4.创建空集合只能用set(),不能用{},{}创建的是空字典

集合生成式

1.集合生成式就是“生成集合的公式”

2.基本语法

{集合元素的表达式 for 自定义变量 in 可迭代对象}

{ele * 2 for ele in range(1,6)}

集合生成式和列表生成式的区别在于,集合生成式使用{},而列表生成式使用[]

七、字典

基本介绍

1.字典(dict)也是一种常用的python数据类型,其他语言可能把字典称为联合内存或联合数组

2.字典是一种映射类型,非常适合处理通过xx查询yy的需求,这里的xx我们称为key(键/关键字),这里的yy我们称为value(值),即key——Value的映射关系

字典的定义

创建一个字典,只要把逗号分隔的不同的元素,用{}括起来即可,存储的元素是一个个的:键值对

注意事项和使用细节

1.字典的key(关键字)通常是字符串或数字,Value可以是任意数据类型

2.字典不支持索引,会报KeyError

3.既然字典不支持索引,所以对字典进行遍历不支持while,只支持for,注意直接对字典进行遍历,遍历得到的是key

# 遍历dict的方式
dict_ = {'one': 1, 'two': 2, 'three': 3}
# 方法一:依次取出key,再通过dict[key]取出对应的value
for key in dict_:
    print(key, dict_[key])

# 方法二:依次取出value
for value in dict_.values():
    print(value)

# 方法三:依次取出key-value
for key, value in dict_.items():
    print(key, value)

4.创建空字典可以通过{},或者dict()

dict_ = {}
dict_ = dict()

5.字典的key必须是唯一的,如果指定了多个相同的key,后面的键值对会覆盖前面的

字典生成式

内置函数zip()

zip()可以将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,返回由这些元组组成的列表

字典生成式基本语法:

{字典key的表达式:字典value的表达式 for 表示key的变量, 表示value的变量 in zip(可迭代对象,可迭代对象)}

books = ['红楼梦', '三国演义', '水浒传', '西游记']
authors = ['曹雪芹', '罗贯中', '施耐庵', '吴承恩']
dict_ = {author:book for author, book in zip(authors, books)}
print(dict_)	# {'曹雪芹': '红楼梦', '罗贯中': '三国演义', '施耐庵': '水浒传', '吴承恩': '西游记'}

八、list、tuple、set、dict传参机制

# list
print("--------------list---------")
def f1(my_list):
    print(f"②my_list:{my_list},地址为:{id(my_list)}")
    my_list[0] = 'iii'
    print(f"③my_list:{my_list},地址为:{id(my_list)}")

my_list = [1, 2, 3, 4, 5]
print(f"①my_list:{my_list},地址为:{id(my_list)}")
f1(my_list)
print(f"④my_list:{my_list},地址为:{id(my_list)}")

# tuple
# 元组是不可变数据类型

# set
print("--------------set---------")
def f1(my_set):
    print(f"②my_set:{my_set},地址为:{id(my_set)}")
    my_set.add('iii')
    print(f"③my_set:{my_set},地址为:{id(my_set)}")

my_set = {1, 2, 3, 4, 5}
print(f"①my_set:{my_set},地址为:{id(my_set)}")
f1(my_set)
print(f"④my_set:{my_set},地址为:{id(my_set)}")

# dict
print("--------------dict---------")
def f1(my_dict):
    print(f"②my_dict:{my_dict},地址为:{id(my_dict)}")
    my_dict[6]=('iii')
    print(f"③my_dict:{my_dict},地址为:{id(my_dict)}")

my_dict = {1:'one', 2:'two', 3:'three', 4:'four', 5:'five'}
print(f"①my_dict:{my_dict},地址为:{id(my_dict)}")
f1(my_dict)
print(f"④my_dict:{my_dict},地址为:{id(my_dict)}")

小结

1.python数据类型主要有整数int/浮点数float/字符串str/布尔值bool/元组tuple/列表list/字典dict/集合set,数据类型分为两个大类,一种是可变数据类型;一种是不可变数据类型

2.可变数据类型和不可变数据类型

  • 可变数据类型:当该数据类型的变量的值发生了变化,如果它的内存地址不变,那么这个数据类型就是可变数据类型
  • 不可变数据类型:当该数据类型的变量的值发生了变化,如果它的内存地址变了,那么这个数据类型就是不可变数据类型

3.python的数据类型

  • 不可变数据类型:数值类型(int,float)、bool、str、tuple
  • 可变数据类型:list、set、dict
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7i.y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值