Python数据容器的总结

本文详细介绍了数据容器的分类(根据索引、重复元素、修改性),通用操作如遍历、统计函数、类型转换以及排序规则,特别强调了字符串和字典的特性。
摘要由CSDN通过智能技术生成

1、数据容器分类

数据容器(一共五个)可以从以下视角进行简单的分类:
·是否支持下标索引
        支持:列表、元组、字符串(序列类型)
        不支持:集合、字典(非序列类型)
·是否支持重复元素:
        支持:列表、元组、字符串(序列类型)
        不支持:集合、字典(非序列类型)
·是否可以修改
        支持:列表、集合、字典
        不支持:元组、字符串

列表:[]   元组:()    字符串:"  "    集合:{}

列表元组字符串集合字典
形式list1 = ['Hello', 111, True]

变量名称 = ((1, 2, 3),  (4, 5, 6)) 

t2 = (1, 2, ['Hello', 'World'])

"abscl"{"1","a","3","asd"}

{

 "key1" : value1,
  "key2" : value2

 "key3" : {"key" : value}
}

元素数量支持多个支持多个支持多个支持多个支持多个
元素类型任意任意仅字符任意key:除字典外任意类型
Value:任意类型
下标索引支持支持支持不支持不支持
重复元素支持支持支持不支持不支持
可修改性支持不支持不支持支持支持
数据有序
for循环都支持
while循环支持支持支持不支持不支持
使用场景可修改、可重复的不可修改、可重复的一串字符不可重复的以key检索Value的

2、数据容器的通用操作

1、遍历

首先,在遍历上,他们都支持遍历操作:
5类数据容器部支持for循环遍历
列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)

2、推导式****

推导式包括:列表推导式、元组推导式、字典推导式、集合推导式。
推导式(又称解析器),是 Python 独有的一种特性。

使用推导式可以快速生成列表、元组、字典以及集合类型的数据

1、列表推导式

其实就是在for循环中,如果循环中的表达式是对可迭代对象遍历进行操作,从而转换成新的数据的话,就可以使用推导式,可以快速生成一个满足指定需要的列表。推导式只是对 for 循环语句的格式做了一下简单的变形,并用 [ ] 括起来,不同之处在于,推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表。

列表推导式的语法格式如下:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]

此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。最外侧的【】是一定要存在的。其中的表达式其实就是 for 循环中的循环体,推导式的执行顺序如下所示:

for 迭代变量 in 可迭代对象
    表达式

例如:

# 推导式
a_list = [x * x for x in range(10)]

# 等同于
for x in range(10):
    a_list += x * x

输出结果:[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]
还可以在列表推导式中添加 if 条件语句,这样列表推导式将只迭代那些符合条件的元素。例

# 推导式
a_list = [x * x for x in range(10) if range(10) % 2 == 0]

多个循环:

dd_list = [(x, y) for x in range(5) for y in range(4)]

# 等同于↓
dd_list = []
for x in range(5):
    for y in range(4):
        dd_list.append((x, y))

输出结果:
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]


2、元组推导式

元组推导式的语法格式如下:

(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )
元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是 [],其它完全相同。用法也完全相同。

例如,我们可以使用下面的代码生成一个元组:

a = (x for x in range(10))
b = tuple(a)
print(f"a = {a},b = {b}")
# 输出结果是 a = <generator object <genexpr> at 0x10556b510>,b = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
# tuple()用于将其他可迭代对象(如列表、字符串、元组等)转换为元组类型

从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象,这一点和列表推导式是不同的。

也可以直接使用 for 循环遍历生成器对象,可以获得各个元素,例如:
a = (x for x in range(1,10))
for i in a:
    print(i,end=' ')

但是最好还是使用tuple函数

3、字典推导式

字典推导式的语法格式如下:

{表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]}
例如:

listdemo = ['Jack','Tom']
#将列表中各字符串值为键,各字符串的长度为值,组成键值对
newdict = {key:len(key) for key in listdemo}
print(newdict)

# 输出结果:{'Jack': 4, 'Tom': 3}


4、集合推导式

集合推导式的语法格式和字典推导式完全相同,如下所示:

{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }
集合推导式和字典推导式的格式完全相同,那么给定一个类似的推导式,如何判断是哪种推导式呢?

最简单直接的方式,就是根据表达式进行判断,如果表达式以键值对(key:value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式,集合中的元素是唯一的。例如:

setnew = {i**2 for i in range(3)}
print(setnew)
# 输出结果: {0, 1, 4}
# 保存在集合中的元素必须是唯一的。
tupledemo = (1,1,2,3,4,5,6,6)
setnew = {x**2 for x in tupledemo if x%2==0}
print(setnew)
# 输出结果:{16, 4, 36}

3、len()、max()、min()等统计类的函数

字符串大小比较时是基于ASCII码值来比较的,即max(字符串)会输出字符串中ASCII码值最大的元素。
字符串与字符串之间如何比较?
        从头到尾入一位位进行比较,其中一位大,后面就无需比较了。
单个字符之间如何确定大小?
        通过ASC川码表,确定字符对应的码值数字来确定大小

4、互相转换

list(其他数据容器类型):转换为列表(list)类型
str(其他数据容器类型):转换为字符串类型
tuple(其他数据容器类型):转换为元组类型
set(其他数据容器类型):转换为集合类型

值得注意的是:

字符串转换时,会将字符串中每一个字符转换为一个元素。
字典转换时,会将字典中的Value抛弃掉,只留下key作为元素。
但是其他类型不可以转成字典,因为没有Value,无法组成键值对。


5、排序功能    sorted(数据容器, [ reverse = True])

reverse = True是翻转的意思,将“从小到大升序排序”的结果翻转,reverse = False则不翻转。
不写 [ reverse = True]默认为False。
同样,字典排序会丢失Value,只对Key排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wmpreturn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值