python基础-2(数据容器【列表、元组、字符串、集合、字典】)

在python中数据容器是指一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素,这些元素可以是任意类型的数据,如字符串、数字、布尔类型等。

根据数据让其的特点不同,如:

是否支持重复元素
是否可以修改
是否有序,等

将其分为5类,分别是:

列表list)、元组tuple)、字符串str)、集合set)、字典dict

目录

1.列表(list)

1.1 列表的定义

1.2  列表的索引(下标)

1.2.1 正向索引

1.2.2 反向索引

1.2.3 嵌套列表的索引

1.3 列表的常用操作

1.4 列表的遍历

1.4.1 while循环

1.4.2 for循环

1.4.3 while循环和for循环的对比

2. 元组(tuple) 

2.1 元组的定义

2.2 元组的操作

2.3 元组的循环

3. 字符串(str) 

3.1 字符串的索引

3.2 字符串的修改

3.3 字符串的操作

3.4 字符串的遍历

4. 序列

4.1 序列的定义

4.2 序列的常用操作 - 切片

5. 集合(set)

5.1 集合的定义

5.2 集合的操作

5.3 集合的循环 

 6. 字典

6.1 字典的定义

6.2 字典数据的获取 

6.3 字典的嵌套 

6.4  字典的常用操作

6.4.1 新增元素

6.4.2 更新元素

6.4.3 删除元素

6.4.4 清空字典

6.4.5 获取全部的key

6.4.6 遍历字典

6.4.7 计算字典内部元素数量

7. 数据容器总结

7.1 数据容器分类

7.2 数据容器特点对比

7.3 各类数据容器应用场景


 

1.列表(list)

 1.1 列表的定义

1. 基本语法

# 字面量
[元素1, 元素2, 元素3 , 元素4.....]


# 定义变量
变量名称 = [元素1, 元素2, 元素3 , 元素4.....]


# 定义空列表
变量名称 = []
变量名称 = list()

列表内的每一个数据,称之为元素,以 [] 作为标识,列表内每一个元素之间用, 逗号隔开。

2.在列表格式中,列表也可以一次存储多个数据,且可以为不同的数据类型,支持嵌套

例如:

list_one = ['python', 666, True]

list_two = [[1, 2, 3], [4, 5, 6]]

1.2  列表的索引(下标)

1.2.1 正向索引

 在列表中,每一个元素都有其下标索引,从0开始依次递增。

1.2.2 反向索引

列表也支持反向索引,也就是从后向前,依次递减(-1,-2,-3.......)

 1.2.3 嵌套列表的索引

在列表中,如果是嵌套列表,同样也支持索引。

1.3 列表的常用操作

1.3.1 列表查询

1.查找某元素的下标

功能:查找指定元素在列表的下标,如果找不到,报错ValueError

语法:列表.index(元素)

index就是列表对象(变量)内置的方法(函数)

例如:

list_one = ['python', 666, True]
print(list_one.index('python'))
# 输出结果为: 0

2. 统计列表内,有多少元素

     语法:len(列表)

     可以得到一个int数字,表示列表内的元素数量

 

1.3.2  列表修改

1.修改特定位置(索引)的元素值:

     语法:列表[下标] =

     可以使用如上语法,直接对指定下标(正向、反向下标均可)的值进行:重新赋值(修改)

2.插入元素:

  语法:列表.insert(下标, 元素),在指定的下标位置,插入指定的元素

list_one = [1, 2, 3]
list_one.insert(1, "insert")
print (list_one)
# [1, "insert", 2, 3]

3.追加元素-1:

 语法:列表.append(元素),将指定元素,追加到列表的尾部

 4.追加元素-2:

语法:列表.extend(其它数据容器),将其它数据容器的内容取出,依次追加到列表尾部

5.删除元素:

语法1 del 列表[下标]

语法2:列表.pop(下标)

6.删除某元素在列表中的第一个匹配项

     语法:列表.remove(元素)

 7. 清空列表内容

语法:列表.clear()

8.  统计某元素在列表内的数量

     语法:列表.count(元素)


1.4 列表的遍历

1.4.1 while循环

既然数据容器可以存储多个元素,那么,就会有需求从容器内依次取出元素进行操作。

将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。

while循环条件如何控制?

定义一个变量表示下标,从 0 开始
循环条件为 下标值 < 列表的元素数量

 

1.4.2 for循环

 语法:

for 临时变量 in 数据容器:
    对临时变量进行处理

例如:

表示,从容器内,依次取出元素并赋值到临时变量上。在每一次的循环中,我们可以对临时变量(元素)进行处理。

结果:

 

 1.4.3 while循环和for循环的对比

while循环和for循环,都是循环语句,但细节不同:

在循环控制上:
while 循环 可以自定循环条件 ,并自行控制
for 循环 不可以自定循环条件 ,只可以一个个从容器内取出数据
在无限循环上:
while循环 可以 通过条件控制做到无限循环
for循环理论上 不可以 ,因为被遍历的容器容量不是无限的
在使用场景上:
while循环适用于任何想要循环的场景
for循环适用于,遍历数据容器的场景或简单的固定次数循环场景

2. 元组(tuple) 

列表是可以修改的,元组同列表一样,但不可对其进行更改,元组一旦定义完成,就不可修改,所以,当我们需要在程序内封装数据,又不希望封装的数据被篡改,那么元组就非常合适了。

2.1 元组的定义

元组定义:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型

# 定义元组的字面量
(元素, 元素, 元素, 元素.... )


# 定义元组变量
变量名称 = (元素, 元素, 元素, 元素.... )


# 定义空元组
变量名称 = ()
变量名称 = tuple()

注意:元组只有一个数据,这个数据后面要添加逗号

同列表一样,元组也支持嵌套定义

2.2 元组的操作

 由于元组不可修改的特性,其操作方法较少,常用的如下:

编号

方法

作用

1

index()

查找某个数据,如果数据存在返回对应的下标,否则报错

2

count()

统计某个数据在当前元组出现的次数

3

len(元组)

统计元组内的元素个数

2.3 元组的循环

 同列表一样,元组也支持循环功能,可以使用for循环和while循环,使用方式同list。

3. 字符串(str) 

字符串是字符的容器,一个字符串可以存放任意数量的字符。

例如字符串:"string"

3.1 字符串的索引

 和其它容器如:列表、元组一样,字符串也可以通过下标进行访问

从前向后,下标从 0 开始(如上图)
从后向前,下标从 -1 开始

3.2 字符串的修改

同元组一样,字符串是一个:无法修改的数据容器。

所以:

修改指定下标的字符  (如:字符串 [0] = “a”
移除特定下标的字符  (如:del 字符串[0]、字符串 .remove() 、字符串 .pop() 等)
追加字符等  (如:字符串 .append()

均无法完成。如果必须要做,只能得到一个新的字符串,旧的字符串是无法修改。

 3.3 字符串的操作

1 .查找特定字符串的下标索引值

语法:字符串.index(字符串)

my_str = 'you and me'
print(my_str.index('and'))
#结果:4

2. 字符串的替换

语法:字符串.replace(字符串1,字符串2

功能:将字符串内的全部:字符串1,替换为字符串2

注意:不是修改字符串本身,而是得到了一个新字符串哦

name = "xiaoming"
new_name = name.replace("ming","hong")

print(new_name) # 结果:xiaohong
print(name) # 结果:xiaoming

如上案例可以看到,字符串name本身并没有发生变化,而是得到了一个新字符串对象。

3. 字符串的分割

语法:字符串.split(分隔符字符串)

功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中

注意:字符串本身不变,而是得到了一个列表对象

name = "xiaoming xiaohong xiangzhang"
name_list = name.split(" ")

print(name_list) # 结果:["xiaoming", "xiaohong", "xiangzhang"]

上例字符串按照给定的 <空格>进行了分割,变成多个子字符串,并存入一个列表对象中。

4. 字符串的规整操作

1)去前后空格

 语法:字符串.strip()

2)去前后指定字符串

语法:字符串.strip(字符串)

5.统计字符串中某字符串的出现次数 

语法:字符串.count(字符串)

name = "xiaoming xiaohong xiangzhang"
print(name.count("xiao"))
# 结果:3

 6. 统计字符串的长度

语法:len(字符串)

•数字(1、2、3...)
•字母(abcd、ABCD等)
•符号(空格、!、@、#、$等)
•中文

均算作1个字符。

3.4 字符串的遍历

同列表、元组一样,字符串也支持while循环和for循环进行遍历,用法与list相同。

4. 序列

4.1 序列的定义

序列是指:内容连续、有序,可使用下标索引的一类数据容器

列表、元组、字符串,均可以可以视为序列。

 

 如图,序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满足这个要求

4.2 序列的常用操作 - 切片

 序列支持切片,即:列表、元组、字符串,均支持进行切片操作

切片:从一个序列中,取出一个子序列

语法:序列[起始下标:结束下标:步长]

表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列

起始下标表示从何处开始,可以留空,留空视作从头开始
结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
步长表示,依次取元素的间隔
步长 1 表示,一个个取元素
步长 2 表示,每次跳过 1 个元素取
步长 N 表示,每次跳过 N-1 个元素取
步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)

注意,此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串) 

my_list = [1, 2, 3, 4, 5]
new_list = my_list[1:4]	# 下标1开始,下标4(不含)结束,步长1
print(new_list)		# 结果:[2, 3, 4]


my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:]	# 从头开始,到最后结束,步长1
print(new_tuple)		# 结果:(1, 2, 3, 4, 5)


my_list = [1, 2, 3, 4, 5]
new_list = my_list[::2]		# 从头开始,到最后结束,步长2
print(new_list)		# 结果:[1, 3, 5]


my_str = "12345"
new_str = my_str[:4:2]	# 从头开始,到下标4(不含)结束,步长2
print(new_str)		# 结果:"13"


my_str = "12345"
new_str = my_str[::-1]	# 从头(最后)开始,到尾结束,步长-1(倒序)
print(new_str)		# 结果:"54321"


my_list = [1, 2, 3, 4, 5]
new_list = my_list[3:1:-1]	# 从下标3开始,到下标1(不含)结束,步长-1(倒序)
print(new_list)		# 结果:[4, 3]


my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:1:-2] 	# 从头(最后)开始,到下标1(不含)结束,步长-2(倒序)
print(new_tuple)		# 结果:(5, 3)

可以看到,这个操作对列表、元组、字符串是通用的。同时非常灵活,根据需求,起始位置,结束位置,步长(正反序)都是可以自行控制的。

5. 集合(set)

在前几个数据容器中,我们可知道:

列表可修改、支持重复元素且有序
元组、字符串不可修改、支持重复元素且有序

 局限就在于:它们都支持重复元素。

如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。

 而集合,最主要的特点就是:不支持元素的重复(自带去重功能)、并且内容无序。

5.1 集合的定义

基本语法:

# 定义集合的字面量
{元素, 元素, 元素, 元素....}

# 定义集合变量
变量名称 = {元素, 元素, 元素, 元素....}

# 定义空集合
变量名称 = set()

5.2 集合的操作

首先,因为集合是无序的,所以集合不支持:下标索引访问

但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法。

1. 添加新元素

     语法:集合.add(元素)。将指定元素,添加到集合内

     结果:集合本身被修改,添加了新元素

 2. 移除元素

     语法:集合.remove(元素),将指定元素,从集合内移除

     结果:集合本身被修改,移除了元素

 3. 从集合中随机取出元素

     语法:集合.pop(),功能,从集合中随机取出一个元素

     结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

 4. 清空集合

     语法:集合.clear(),功能,清空集合

     结果:集合本身被清空

 5. 取出2个集合的差集

     语法:集合1.difference(集合2),功能:取出集合1和集合2的差集(集合1有而集合2没有的)

     结果:得到一个新集合,集合1和集合2不变

6.  消除2个集合的差集

     语法:集合1.difference_update(集合2)

     功能:对比集合1和集合2在集合1内,删除和集合2相同的元素。

     结果:集合1被修改,集合2不变

7.  2个集合合并

     语法:集合1.union(集合2)

     功能:将集合1和集合2组合成新集合

     结果:得到新集合,集合1和集合2不变

 8.  查看集合的元素数量

 语法:len(集合)

     功能:统计集合内有多少元素

     结果:得到一个整数结果

5.3 集合的循环 

集合不支持下标索引,所以也就不支持使用while循环。但集合支持for循环用法:

 

 6. 字典

在python中字典采用键值对方式进行定义,类似于json格式或js中的对象。

6.1 字典的定义

字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:

使用 {} 存储原始,每一个元素是一个键值对
每一个键值对包含 Key Value (用冒号分隔)
键值对之间使用逗号分隔
Key Value 可以是任意类型的数据( key 不可为字典)
Key 不可重复,重复会对原有数据覆盖

 

6.2 字典数据的获取 

字典同集合一样,不可以使用下标索引,但是字典可以通过Key值来取得对应的Value:

6.3 字典的嵌套 

字典的KeyValue可以是任意数据类型(Key不可为字典)。那么,就表明,字典是可以嵌套的。

 例如:

 字典:

6.4  字典的常用操作

6.4.1 新增元素

语法:字典[Key] = Value,结果:字典被修改,新增了元素

6.4.2 更新元素

语法:字典[Key] = Value,结果:字典被修改,元素被更新

  注意:字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value

6.4.3 删除元素

语法:字典.pop(Key),结果:获得指定KeyValue,同时字典被修改,指定Key的数据被删除

 

6.4.4 清空字典

语法:字典.clear(),结果:字典被修改,元素被清空

 

6.4.5 获取全部的key

语法:字典.keys(),结果:得到字典中的全部Key

6.4.6 遍历字典

语法:for key in 字典.keys()

运行结果:

 

 注意:字典不支持下标索引,所以同样不可以用while循环遍历

6.4.7 计算字典内部元素数量

语法:len(字典)

  结果:得到一个整数,表示字典内元素(键值对)的数量

 

7. 数据容器总结

7.1 数据容器分类

数据容器可以从以下视角进行简单的分类:

是否支持下标索引
支持:列表、元组、字符串 - 序列类型
不支持:集合、字典 - 非序列类型
是否支持重复元素:
支持:列表、元组、字符串 - 序列类型
不支持:集合、字典 - 非序列类型
是否可以修改
支持:列表、集合、字典

不支持:元组、字符串

7.2 数据容器特点对比

列表

元组

字符串

集合

字典

元素数量

支持多个

支持多个

支持多个

支持多个

支持多个

元素类型

任意

任意

仅字符

任意

Key:Value

Key:除字典外任意类型

Value:任意类型

下标索引

支持

支持

支持

不支持

不支持

重复元素

支持

支持

支持

不支持

不支持

可修改性

支持

不支持

不支持

支持

支持

数据有序

使用场景

可修改、可重复的一批数据记录场景

不可修改、可重复的一批数据记录场景

一串字符的记录场景

不可重复的数据记录场景

Key检索Value的数据记录场景

7.3 各类数据容器应用场景

 列表:一批数据,可修改、可重复的存储场景

元组:一批数据,不可修改、可重复的存储场景

字符串:一串字符串的存储场景

集合:一批数据,去重存储场景

字典:一批数据,可用Key检索Value的存储场景

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HM-hhxx!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值