最近使用了一个数据格式交换技术JSON,发现他的格式完全是按照python容器的格式,可以说JSON就是python,为此复习python容器的格式及其访问;
目录
python容器的种类:
python中常用的容器主要划分为两种:序列(即有序的列表,如:列表、元祖等)和映射(如:字典)。序列中,每个元素都有下标,它们是有序的。映射中,每个元素都有名称(又称“ 键 ”),它是无序的。
除了序列和映射之外,还有一种需要注意的容器——“ 集合 ”。
python容器有五种(我认为字符串也是一种容器、当然你也可以认为只有四种、无伤大雅)
字符串、列表[ ]、元组( )、集合{ }、字典{ } ;
字符串
字符串格式化
说到字符串就不得不提一下python字符串的快速格式化的语法了(因为他有点像在前端web界面使用el表达式,从与域中取数据的语法格式 ):
num = 12
print(f"数字 :{num}")
当然你也可以像C语言一样,使用占位符呢样,只不过略有区别:
python:
num = 111
num3 = 129.1234
str1 = "字符串1"
print("字符串: %s,整数字:%d,浮点数:%7.2f" % (str1, num, num3))
C语言:
#include <stdio.h>
int main()
{
int a = 10, b = 20;
int len = printf("a = %d, b = %d\n", a, b);
printf("len = %d\n", len);
}
字符串不可变
在Python中字符串是不可变的,不可变是指不可以通过索引修改字符串中的某个元素,如果你学过java你就会知道java中的字符串也是不可变的,这里的不可变不是不可修改,就比如下面这串代码python是允许的;
str1 = "qqq"
str1 = "wwww"
print(str1) //wwww
字符串的不可变性指的是,字符串一旦被创建就不能被修改。这意味着,如果需要更改字符串中的字符或添加新字符,则需要创建一个新字符串对象(不理解也没关系,可以看下面代码)。
my_string = "hello"
my_string[0] = "H"
print(my_string) // 'str' object does not support item assignment
在这个例子中,我们尝试将字符串 my_string
的第一个字符从小写字母 "h" 改为大写字母 "H"。但是,当我们运行该代码时,会抛出一个异常 'str' object does not support item assignment:
这是因为 Python 字符串是不可变的,不能通过索引方式来修改其元素。如果要更改字符串中的字符,则需要创建一个新字符串对象,并将其赋值给原始字符串变量。
字符串中的元素访问
python中的字符串和java中的字符串都可以通过下标去获取指定位置的元素,这个特性保证了字符串的切片,也就是字符串切割,Java中是用的subString()方法,在python中用的是切片;
name = "zhangsan"
print(name[0])//输出z
字符串切片
字符串格式:
Python 中字符串切片的格式为:
[start:stop:step]
其中,
start
表示起始位置(包括该位置),stop
表示终止位置(不包括该位置),step
表示步长。
例如,想要获取字符串 hello world
的前三个字符,可以使用如下代码:
my_string = "hello world"
result = my_string[0:3]
print(result) # 输出 "hel"
在这个例子中,我们使用了字符串切片的形式 [0:3]
来获取字符串的前三个字符。由于切片操作是左闭右开的区间,因此这个操作会获取字符串的第一个、第二个和第三个字符,并返回一个新的字符串 hel
。
另外,还可以使用负数来表示从字符串末尾开始计算的索引值,也就是字符串也支持倒叙。例如,如果要获取字符串的最后四个字符,可以使用如下代码:
my_string = "hello world"
result = my_string[-4:]
print(result) # 输出 "orld"
在这个例子中,我们使用了字符串切片的形式 [-4:]
来获取字符串的最后四个字符。由于不能指定终止位置时默认取到字符串末尾,所以这个操作会获取字符串的倒数第四个、倒数第三个、倒数第二个和倒数第一个字符,并返回一个新的字符串 orld
。
列表[ ]
Python 中的列表是一种有序容器,它允许存储任意数量和类型的元素,并且可以动态调整其大小。以下是 Python 列表的主要特点:
可变性:列表中的元素可以进行修改、添加、删除等操作,因此是一种可变容器,这点和字符串的不可变性比较记忆。
有序性:列表中的元素按照插入顺序排列,因此可以通过下标来访问和操作列表中的元素。
灵活性:列表可以存储任意数量和类型的元素,包括数字、字符串、布尔值、函数等数据类型。
支持切片:使用切片操作可以从列表中获取一个子列表,或者对列表进行分割、合并等操作,格式和字符串切片格式一模一样。
方法多样性:列表支持多种常见的操作,例如排序、查找、遍历等。
可迭代性:列表是一种可迭代对象,可以使用 for 循环来遍历其中的元素。
语法格式:
list1 = [ 123 , "456" , [123,"456"] ,True]
特征:中括号包裹,逗号隔开元素,元素类型任意,可以嵌套,可以用 index 进行读写
基于列表的以上特点,我们就可以对列表中的每个元素进行增删改查。可以按照index删除元素(pop),也可以按照值删除元素(remove),可以插入元素到某个位置(insert),也可以追加元素到列表尾部(append)。
元组( )
在 Python 中,元组(Tuple)是一种有序容器,用于存储多个值。元组和列表类似,你可以认为元组就是一种特殊的列表,但具有以下特点:
不可变性:元组中的元素不允许修改、添加或删除。这意味着一旦创建了元组,就无法对其进行更改。
有序性:元组中的元素按照插入顺序排列。因此,可以使用索引来访问特定位置的元素。
可以包含任意类型的数据:元组中可以包含数字、字符串、布尔值、函数等数据类型。
具有不可变性的子元素:如果元组中的某个元素本身也是不可变的(例如另一个元组或字符串),则该元素也不能被修改。
可以用作字典键:由于元组是不可变的,因此可以安全地用作字典的键。相比之下,列表不能用作字典的键,因为它们是可变的。
语法格式:
语法:(123,456,789)
特征:小括号包裹,逗号隔开元素,元素类型必须统一,可以嵌套但是满足类型统一,可以用 index 进行读,但不可写,更不可增删。
元组的所有操作都类似List,唯一的不同就是只能 查,不能增(没有append和insert)删(没有remove和pop)改(不能对元素赋值)。可以认为 Tuple 是一个 元素类型必须统一且不可修改 的 List,只能读里面的内容。
元组不可变
解释一下元组的元素类型必须统一这句话,实际上我们在定义元组时是可以存储不同类型的数据的,只不过不会这样使用,因为python设计元组的初衷就是,定义一种特殊的列表,有序且拥有列表的大部分功能并且不可变;这里的不可变同样指不可通过索引来修改其中的元素
tup1 = (12, "ser", 23, True)
print(type(tup1[0]))
# tup1[1] += 23 TypeError: can only concatenate str (not "int") to str
num = tup1[0] + 23
print(num)
# tup1[0] = 12 TypeError: 'tuple' object does not support item assignment
集合{ }
在 Python 中,集合(Set)是一种无序的容器,用于存储唯一的元素,也就是说你存值之前他会先做一次判断如果没有存入,如果有直接跳过,这个有点像java的set集合。以下是 Python 集合的主要特点:
无序性:集合中的元素没有固定顺序,因此不能像列表或元组那样通过索引来访问它们。
唯一性:集合中的元素必须是唯一的,重复的元素会被合并为一个。这意味着集合可以用于去除重复的元素。
可变性:集合是一种可变容器,可以添加、删除或修改其中的元素。
不支持索引:由于集合是无序的,因此不能像其他序列类型那样使用索引来访问其元素。
支持多种操作:集合支持多种常见操作,例如并集、交集、差集等,可以使用这些操作来对集合进行处理和操作。
可迭代性:集合是一种可迭代对象,可以使用 for 循环来遍历其中的元素。
总之,Python 集合是一种简单而有用的数据结构,通常用于存储独一无二的元素,并且能够方便地进行各种操作。集合的唯一性质使其成为一种很好的设计选择,并且它们通常可以与其他 Python 对象(例如列表、字典等)一起使用,以便以最佳方式解决问题。
语法格式:
语法:{ 123,"qqq",456}
特征:大括号包裹,逗号隔开元素,元素类型任意,可以嵌套;
set集合是不支持索引访问的,如下列代码会报错:
set1 = {123, "www", 23}
print(set1[2]) //TypeError: 'set' object is not subscriptable
字典{ }
在 Python 中,字典(Dictionary)是一种无序的容器,用于存储键值对,字典有点像java中的map集合。以下是 Python 字典的主要特点:
键值对:字典中的元素由键(Key)和值(Value)组成,每个键对应一个值。可以使用键来获取对应的值。
可变性:字典是一种可变容器,可以添加、删除或修改其中的元素。
唯一性:字典中的键必须是唯一的,如果试图使用重复的键添加元素,则会覆盖原有的值。
不支持索引:由于字典是无序的,因此不能像其他序列类型那样使用索引来访问其元素。
支持多种操作:字典支持多种常见操作,例如获取所有键、获取所有值、检查是否包含某个键等,可以使用这些操作来对字典进行处理和操作。
可迭代性:字典是一种可迭代对象,可以使用 for 循环遍历其中的键或值。
语法格式:
语法:{
"name" :"zhangsan","age":22,
"gender" : "nan"
}
特征:大括号包裹,逗号隔开元素,元素构成必须统一格式(由分号分隔的两部分,前半部分必须是字符串,后半部分任意),key一定是字符串,如果发现某个元素没包含冒号,则会被当做Set处理,又因为有些元素包含分号,而Set允许元素中出现冒号(字符串中的不算),所以此时会报错。