Python学习笔记-Python数据容器
  kCmFobNLwURY 2023年11月13日 18 0

数据容器入门

为什么学习数据容器?

思考一个问题:如果我想要在程序中,记录5个人的信息,如姓名。改如何做?

一、定义5个变量

name1 = '王太利'

name2 = '肖央'

name3 = '林俊杰'

name4 = '刘德华'

name5 = '张学友'

二、一个变量完成

name_list = [ '王太利', '肖央', '林俊杰', '刘德华', '张学友' ]

print(name_list)

这就是数据容器,一个容器可以容纳多份数据。

数据容器的定义

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

数据容器根据特点不同,如:

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

分为5类,分别是:

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

总结

什么事容器?

一种可以存储多个元素的Python数据类型。

Python有哪些数据容器?

列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict),它们各有特点,但都满足可容纳多个元素的特性。

数据容器:list(列表)

列表的定义

为什么需要列表?

思考:有一个人的姓名(TOM)怎么在程序中存储?

答:字符串变量。

思考:如果一个班级100为学生,每个人的姓名都要存储,应该如何书写程序?声明100个变量吗?

答:不是,使用列表,列表一次可以存储多个数据。

列表(list)类型,是数据容器的一类。

基本语法

# 字面量

[ 元素1, 元素2, 元素3, 元素4, ... ]


# 定义变量

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


# 定义空列表

变量名称 = []

变量名称 = list()

列表内的每一个数据,称之为元素:

  • 以[]作为标识
  • 列表内每一个元素之间用, 逗号隔开

列表的定义方式:

案例演示:使用[]的方式定义列表

name_list = [ 'itcainiao', 'itcast', 'python' ]

print(name_list)

print(type(name_list))


my_list = [ 'itcainiao', 666, True ]

print(my_list)

print(type(my_list))

注意事项:

列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套。

嵌套列表的定义

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

print(my_list)

print(type(my_list))

总结

列表的定义语法

[ 元素1, 元素2, 元素3, 元素4, ... ]

什么是元素?

数据容器内的每一份数据,都称之为元素。

元素的类型有限制吗?

元素的类型没有任何限制,甚至元素也可以是列表,这样就定义了嵌套列表。

列表的下标索引

列表的下标索引是什么

如何从列表中取出特定位置的数据呢?

可以使用:下标索引

Python学习笔记-Python数据容器_数据


如图,列表中的每一个元素,都有其位置下表索引,从前向后的方向,从0开始,依次递增。

如何通过下表索引取出对应位置的元素

我们只需要按照下表索引,即可取得对应位置的元素。

# 语法,列表[下表索引]

name_list = [ 'Tom', 'Lily', 'Rose' ]

print(name_list[0]) #结果,Tom

print(name_list[1]) #结果,Lily

print(name_list[2]) #结果,Rose

或者,可以反向索引,也就是从后向前,从-1开始,一次递减(-1,-2,-3,……)。

Python学习笔记-Python数据容器_数据_02

如图,反向,从后向前,下标索引为:-1、-2、-3、-4、-5、-6,依次递减。

# 语法,列表[下表索引]

name_list = [ 'Tom', 'Lily', 'Rose' ]

print(name_list[-3]) #结果,Tom

print(name_list[-2]) #结果,Lily

print(name_list[-1]) #结果,Rose

如果列表是嵌套的列表,同样支持下标索引。

Python学习笔记-Python数据容器_for循环_03

my_list = [['Tom', 'Lily', 'Rose'],[22,33,44]]

print(my_list[0][1])

总结

列表的下标索引是什么?

列表的每一个元素,都有编号称之为下标索引。

从前向后的方向,编号从0开始递增。

从后向前的方向,编号从-1开始递减。

如何通过下标索引取出对应位置的元素呢?

列表[下标],即可取出。

下标索引的注意事项

要注意下标索引的取值范围,超出范围无法取出元素,并且会报错。

列表的常用操作

列表的常用操作(方法)

列表除了可以:定义、使用下表索引获取值,以外,列表也提供了一系列功能:

  • 插入元素
  • 删除元素
  • 清空列表
  • 修改元素
  • 统计元素个数

等等功能,这些功能我门都称之为:列表的方法。

列表的查询功能(方法)

方法与函数的格式区别

回忆:函数是一个封装的代码单元,可以提供特定功能。

在Python中,如果将函数定义为class(类)的成员,那么函数会称之为:方法。

示例,函数:

def add(x, y):

return x + y

示例,方法:

class Student:

def add(self, x , y):

return x + y

方法和函数功能一样,有传入参数,有返回值,只是方法的使用格式不同。

函数的使用:num = add(1, 2)

方法的使用:

student = Student()

num = student.add(1, 2)

查找某元素的下标

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

语法:列表.index(元素)

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

my_list = ['itcainiao', 'itcast', 'python']

index = my_list.index('itcainiao')

print(index)

查找某下标的元素

语法:列表[下标]

my_list = ['itcainiao', 'itcast', 'python']

print(my_list[1])

列表的修改功能(方法)

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

语法:列表[下标] = 值

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

# 正向下表索引

my_list = [1, 2, 3, 4, 5]

my_list[1] = 6

print(my_list)

# 反向下表索引

my_list = [1, 2, 3, 4, 5]

my_list[-1] = 7

print(my_list)

插入元素

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

my_list = [1, 2, 3, 4, 5]

my_list.insert(1, 'itcast')

print(my_list)

追加元素方法一

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

my_list = [1, 2, 3, 4, 5]

my_list.append('python')

print(my_list)

my_list = [1, 2, 3, 4, 5]

my_list.append([5, 6, 7, 8, 9])

print(my_list) # 输出结果[1, 2, 3, 4, 5, [5, 6, 7, 8, 9]]

追加元素方法二

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

my_list = [1, 2, 3]

my_list.extend([4, 5, 6])

print(my_list)

删除元素

语法1:del 列表[下标]

my_list = [1, 2, 3]

del my_list[1]

print(my_list)

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

.pop语法是将列表中的元素取出,可以重新赋值给其他变量使用。

my_list = [1, 2, 3]

receive = my_list.pop(2)

print(my_list)

print(receive)

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

语法:列表.remove(元素)

my_list = [1, 2, 3, 1, 2, 3]

my_list.remove(1)

print(my_list)

清空列表内容

语法:列表.clear()

my_list = [1, 2, 3, 1, 2, 3]

my_list.clear()

print(my_list)

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

语法:列表.count(元素)

my_list = [1, 2, 3, 1, 3, 3]

count = my_list.count(3)

print(count)

my_list = [1, 2, 3, 1, 3, 3]

print(my_list.count(3))

统计列表内,有多少元素

语法:len(列表)

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

my_list = [1, 2, 3, 4, 5]

print(len(my_list))


my_list = [1, 2, 3, 4, 5]

count = len(my_list)

print(count)

列表的方法 - 纵览

编号

使用方法

作用

1

列表.append(元素)

向列表中追加一个元素,追加到列表尾部

2

列表.extend(容器)

将数据容器的内容依次取出,追加到列表尾部

3

列表.insert(下标, 元素)

在指定下标处,插入指定的元素

4

del 列表[下标]

删除列表指定下标元素

5

列表.pop(下标)

删除列表指定下标元素(取出指定下标元素,可以赋值给指定变量)

6

列表.remove(元素)

从前向后,删除此元素第一个匹配项

7

列表.clear()

清空列表

8

列表.count(元素)

统计此元素在列表中出现的次数

9

列表.index(元素)

查找指定元素在列表的下标

找不到报错ValueError

10

len(列表)

统计容器内有多少元素

列表的特点

列表有如下特点:

  • 可以容纳多个元素(上限2**63-1、9223372036854775807个)
  • 可以容纳不同类型的元素(混装)
  • 数据是有序存储的(有下标序号)
  • 允许重复数据存在
  • 可以修改(增加或删除元素等)

总结

列表的常见方法

编号

使用方法

作用

1

列表.append(元素)

向列表中追加一个元素,追加到列表尾部

2

列表.extend(容器)

将数据容器的内容依次取出,追加到列表尾部

3

列表.insert(下标, 元素)

在指定下标处,插入指定的元素

4

del 列表[下标]

删除列表指定下标元素

5

列表.pop(下标)

删除列表指定下标元素(取出指定下标元素,可以赋值给指定变量)

6

列表.remove(元素)

从前向后,删除此元素第一个匹配项

7

列表.clear()

清空列表

8

列表.count(元素)

统计此元素在列表中出现的次数

9

列表.index(元素)

查找指定元素在列表的下标

找不到报错ValueError

10

len(列表)

统计容器内有多少元素

列表有哪些特点

列表有如下特点:

  • 可以容纳多个元素(上限2**63-1、9223372036854775807个)
  • 可以容纳不同类型的元素(混装)
  • 数据是有序存储的(有下标序号)
  • 允许重复数据存在
  • 可以修改(增加或删除元素等)

练习题 - 常用功能练习

有一个列表,内容是:[21, 25, 21, 23, 22, 20],记录的是一批学生的年龄。

请通过列表的功能(方法),对其进行

1、定义这个列表,并用变量接收它

2、追加一个数字31,到列表的尾部

3、追加一个新列表[29, 33, 30],到列表的尾部

4、取出第一个元素(应是:21)

5、取出最后一个元素(应是:30)

6、查找元素31,在列表中的下标位置

"""

练习题-记录学生年龄

"""

# 定义学生年龄列表,并用变量接收

age = [21, 25, 21, 23, 22, 20]


# 追加一个数字31到列表尾部

age.append(31)

print(f"追加一个数字31到列表的尾部:{age}")


# 追加一个新的列表到列表尾部

age.extend([29, 33, 30])

print(f"追加一个新的列表到列表的尾部:{age}")


# 取出第一个元素

num1 = age[0]

print(f"取出第一个元素的方法一:{num1}")


print(f"取出第一个元素的方法二:{age[0]}")


# 取出最后一个数字

num2 = age[-1]

print(f"取出最后一个元素的方法一:{num2}")


print(f"取出最后一个元素的方法二:{age[-1]}")


# 查找31在列表的下标位置

num3 = age.index(31)

print(f"查找31在列表的下标位置方法一:{num3}")


print(f"查找31在列表的下标位置方法二:{age.index(31)}")

list(列表)的遍历

列表的遍历 - while循环

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

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

如何遍历列表的数据呢?

  • 可以使用while循环

如何在循环中取出列表的元素呢?

  • 使用列表[下标]的方式取出

循环条件如何控制?

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

# 定义while循环练习函数

def list_while_func():

"""

使用while循环遍历列表的函数演示

:return: None

"""

# 定义一个列表

my_list = ['cainiao', 'itcat', 66, True]

# 循环控制变量通过下表索引来控制,默认0

# 每一次循环将下表索引变量+1

# 循环条件 下标索引 < 列表的元素数量


# 定义控制变量

index = 0

# while循环遍历列表元素

while index < len(my_list):

element = my_list[index]

print(f"while循环遍历my_list列表的结果是:{element}")

index += 1


list_while_func()

列表遍历 - for循环

除了while循环外,Python中还有另外一种循环形式:for循环。

对比while循环,for循环更加适合对列表等数据容器进行遍历。

语法:

for 临时变量 in 数据容器:

对临时变量进行处理

表示,从容器内,依次取出元素并赋值到临时变量上。

在每一次的循环中,我们可以对临时变量(元素)进行处理。

# 定义for循环练习函数

def list_for_func():

"""

使用for循环遍历列表的函数演示

:return: None

"""

# 定义列表

my_list = [111, "itcainiao", False, 13.14]

# for循环遍历列表元素

for i in my_list:

print(f"while循环遍历my_list列表的结果是:{i}")


list_for_func()

while循环和for循环的对比

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

  • 在循环控制上:

- while循环可以自定义循环条件,并进行控制

- for循环不可以自定义变量条件,只可以一个个从容器内取出数据

  • 在无限循环上:

- while循环可以通过条件控制做到无限循环

- for循环理论上不可以,因为被遍历的容器容量不是无限的

  • 在使用场景上:

- while循环适用于任何想要循环的场景

- for循环适用于,遍历数据容器的场景或简单的固定次数循环场景

总结

什么是遍历

将容器内的元素依次取出,并处理,称之为遍历操作。

如何遍历列表的元素

可以使用while或for循环。

for循环的语法

for 临时变量 in 数据容器:

对临时变量进行处理

for循环和while循环对比

  • for循环更简单,while更灵活。
  • for循环用于从容器内依次取出元素并处理,while循环用以任何需要循环的场景

练习题 - 取出列表内的偶数

定义一个列表,内容是:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  • 遍历列表,取出列表内的偶数,并存入一个新的列表对象中
  • 使用while循环和for循环各操作一次

提示:

  • 通过if判断来确认偶数
  • 通过列表的append方法,来增加元素
"""
  取出列表内的偶数
"""

# 定义while循环函数
def list_while_func():
    """
    使用while循环遍历列表并取出偶数赋值到新容器中
    :return:
    """
    # 定义列表
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    # 定义接收遍历取出的元素列表
    user_list = []
    # 定义循环变量
    index = 0
    # while循环遍历列表并将取出偶数增加到user_list列表中
    while index < len(my_list):
        if my_list[index] % 2 == 0:
            user_list.append(my_list[index])

        index += 1
    print(f"while遍历{my_list}列表,并将取出偶数增加到user_list的结果是:{user_list}")

list_while_func()


# 定义for循环函数
def list_for_func():
    """
    使用for循环遍历列表并取出偶数赋值到新容器中
    :return:
    """
    # 定义数据容器(列表)
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    user_list = []
    # for循环遍历列表并将取出偶数增加到user_list列表中
    for i in my_list:
        if i % 2 == 0:
            user_list.append(i)

    print(f"for循环遍历{my_list}列表,取出偶数增加到user_list列表的结果是:{user_list}")

list_for_func()

数据容器:tuple(元组)

为什么需要元组

思考:列表是可以修改的。

如果想要传递的信息,不能被篡改,列表就不合适了。

元组同列表一样,都是可以封装多个、不同类型的元素在内。

但最大的不同点在于:

元组一旦定义完成,就不可修改;所以,当我们需要在程序内封装数据,又不希望封装的数据被篡改,那么元组就非常合适了。

定义元组

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

# 定义元组字面量

(元素, 元素, ……, 元素)

# 定义元组变量

变量名称 = (元素, 元素, ……, 元素)

# 定义空元组

变量名称 = ()

变量名称 = tuple()

# 定义元组

t1 = (1, "hellp", True)

t2 = ()

t3 = tuple()

print(f"t1的类型是:{type(t1)},内容是:{t1}")

print(f"t2的类型是:{type(t2)},内容是:{t2}")

print(f"t3的类型是:{type(t3)},内容是:{t3}")

注意事项

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

# 定义3个元素的元组

t1 = (1, "hellp", True)

print(f"t1的类型是:{type(t1)},内容是:{t1}")


# 定义一个元素的元组

t2 = ('hello', )

print(f"t2的类型是:{type(t2)},内容是:{t2}")

元组的嵌套

# 元组的嵌套

t1 = ((1, 2, 3), (4, 5, 6))

print(f"t1的类型是:{type(t1)},内容是:{t1}")


# 元组中可以嵌套列表,嵌套的列表中的数据可以修改

t2 = ((1, 2, 3), [4, 5, 6])

print(f"t2的类型是:{type(t2)},内容是:{t2}")

下标索引取数据

# 下标索引取数据

t1 = ((1, 2, 3), (4, 5, 6))

num = t1[1][1]

print(f"从嵌套元组中取出的数据是:{num}")

元组的相关操作

编号

方法

作用

1

index()

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

2

count()

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

3

len(元组)

统计元组内的元素个数

# 下标索引取数据

t1 = ((1, 2, 3), (4, 5, 6))

num = t1[1][1]

print(f"从嵌套元组中取出的数据是:{num}")


# 根据index(),查找特定元素的第一个匹配项

t1 = (1, "hellp", True, 1, "hellp", True)

print(f"查找元素1在元组中的下标位置是:{t1.index(1)}")


# 根据count(),查找特定元素在元组中出现的次数

t1 = (2, 'hello', True, 2, 'hello', True)

print(f"查找t1元素True在元组中的出现的次数是:{t1.count(True)}")

# len()统计元组中元素的个数

t1 = (2, 'hello', True, 2, 'hello', True)

print(f"统计t1中元素的个数是:{len(t1)}")

元组的遍历

# while循环实现元组遍历

t1 = (1, 2, 3, 'heihei', 'itcainiao', 'itcast', True, False, 'Python')

count = 0

while count < len(t1):

element = t1[count]

print(f"hile循环实现元组遍历的结果是:{element}")

count += 1


# for循环实现元组的遍历

t1 = (1, 2, 3, 'heihei', 'itcainiao', 'itcast', True, False, 'Python')

for i in t1:

print(f"for循环实现元组的遍历的结果是:{i}")

元组的相关操作 - 注意事项

  • 不可以修改元组的内容,否则会直接报错

# 尝试修改元组内容

t1 = (1, 2, 3)

t1[1] = 'itcainiao'

执行后报错:

TypeError: 'tuple' object does not support item assignment

  • 可以修改元组内的list的内容(修改元素、增加、删除、反转等)

# 尝试修改元组内容

t1 = (1, 2, ['Python', 5, 6])

t1[2][1] = 'itcainiao'

print(f"t1元组中list数据修改后的结果是:{t1}")

元组的特点

经过以上对元组的学习,可以总结元组有如下特点:

  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是有序存储的(下表索引)
  • 允许重复数据存在
  • 不可以修改(增加或删除元素等)
  • 支持for循环

多数特性和list一致,不同点在于不可修改的特性。

总结

元组的定义方式

(元素, 元素, ……, 元素)

元组的操作方法

编号

方法

作用

1

index()

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

2

count()

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

3

len(元组)

统计元组内的元素个数

元组的注意事项

不可以修改内容(可以修改内部list的内部元素)

元组的特点

  • 和list基本相同(有序、任意数量元素、允许重复元素、支持不同类型数据),唯一不同在于不可修改。
  • 支持for循环

练习题 - 元组的基本操作

定义一个元组,内容是:('周杰伦', 11, ['football', 'music']),记录的是一个学生的信息(姓名、年龄、爱好)。

请通过元组的功能(方法),对其进行

1、查询其年龄所在的下标位置

2、查询学生的姓名

3、删除学生爱好中的football

4、增加爱好:coding到爱好list内

# 定义元组

age = ('周杰伦', 11, ['football', 'music'])


# 查询其年龄所在的下标位置

print(f"学生年龄对应的下标索引是:{age.index(11)}")


# 查询学生的姓名

print(f"元组中学生的名字是:{age[0]}")


# 删除学生爱好中的football

del age[2][0]

print(f"删除学生爱好中的football后的结果是:{age}")


# 增加爱好:coding到爱好list内

age[2].append('coding')

print(f"增加爱好:coding到爱好list内的结果是:{age}")

数据容器:str(字符串)

再识字符串

尽管字符串看起来并不像:列表、元组那样,一看就是存放了许多数据的容器。

但不可否认的是,字符串同样也是数据容器的一元

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

如,字符串:"itcain"

Python学习笔记-Python数据容器_元组_04

字符串的下表(索引)

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

  • 从前向后,下标从0开始
  • 从后向前,下标从-1开始

# 通过下标获取特定位置字符

name = "itcain"

print(f"{name}字符串按从前向后的下标位置找出c元素:{name[2]}。按从后向前的下标位置找出c元素:{name[-4]}")

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

所以:

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

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

字符串的常用操作

查找特定字符串的额下标引值

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

my_str = "itcainiao in cainiaojizhongying"

value = my_str.index("in")

print(f"{my_str}中的in其起始下标值是:{value}")

字符串的替换

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

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

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

my_str = "itcainiao in cainiaojizhongying"

new_my_str = my_str.replace('it', '叮叮噹')

print(f"{my_str}最后的结果是:{new_my_str}")

结果是:

itcainiao in cainiaojizhongying最后的结果是:叮叮噹cainiao in cainiaojizhongying

字符串的分割

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

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

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

name = "itcainiao in cainiaojizhongying 我是 大大的 菜鸟"

name_list = name.split(" ")

print(f"name字符串使用空格分隔符后的结果是:{name_list}")

输出结果是:

name字符串使用空格分隔符后的结果是:['itcainiao', 'in', 'cainiaojizhongying', '我是', '大大的', '菜鸟']

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

字符串的规整操作(去前后空格)

语法:字符串.strip()

my_str = " itcainiao in cainiaojizhongying 我是 大大的 菜鸟 "

print(f"my_str规整前的结果是:{my_str}")

new_my_str = my_str.strip()

print(f"my_str规整后的结果是:{new_my_str}")

字符串的规整操作(去前后指定字符串)

my_str = "123itcainiao in cainiaojizhongying 我是 大大的 菜鸟321"

print(f"my_str规整前的结果是:{my_str}")

new_my_str = my_str.strip('123')

print(f"my_str规整后的结果是:{new_my_str}")

注意,传入的是“123”其实就是:“1”、“2”和“3”都会移除,是按照单个字符。

统计字符串内某字符串的出现次数功能

my_str = "123itcainiao in cainiaojizhongying 我是 大大的 菜鸟321"

count = my_str.count('cainiao')

print(f"cainiao在字符串中出现的次数是:{count}")

统计字符串的字符个数

my_str = "123itcainiao in cainiaojizhongying 我是 大大的 菜鸟321"

num = len(my_str)

print(f"my_str字符串的字符个数是:{num}")

字符串常用操作汇总

编号

操作

说明

1

字符串[下标]

根据下表索引取出特定位置字符

2

字符串.index(字符串)

查找给定字符串的第一个匹配项的下标

3

字符串.replace(字符串1, 字符串2)

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

不会修改原字符串,而是得到一个新的

4

字符串.split(字符串)

按照给定字符串,对字符串进行分隔不会修改原字符串,而是得到一个新的列表

5

字符串.strip()

字符串.strip(字符串)

移除首尾的空格和换行符或指定字符串

6

字符串.count(字符串)

统计字符串内某字符串的出现次数

7

len(字符串)

统计字符串的字符个数

字符串的遍历

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

my_str = "cainiaojizhongying"

index = 0

while index < len(my_str):

count = my_str[index]

print(f"while遍历字符串的结果是:{count}")

index += 1


my_str = "cainiaojizhongying"

for i in my_str:

print(f"while遍历字符串的结果是:{i}")

字符串的特点

作为数据容器,字符串有如下特点:

  • 只可以存储字符串
  • 长度任意(取决于内存大小)
  • 支持下表索引
  • 允许重复字符串存在
  • 不可以修改(增加或删除元素等)
  • 支持for循环

总结

字符串为什么被称之为数据容器呢?

字符串可以看做是字符串的容器,支持下表索引等特性。

字符串有哪些常用操作方法?

编号

操作

说明

1

字符串[下标]

根据下表索引取出特定位置字符

2

字符串.index(字符串)

查找给定字符串的第一个匹配项的下标

3

字符串.replace(字符串1, 字符串2)

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

不会修改原字符串,而是得到一个新的

4

字符串.split(字符串)

按照给定字符串,对字符串进行分隔不会修改原字符串,而是得到一个新的列表

5

字符串.strip()

字符串.strip(字符串)

移除首尾的空格和换行符或指定字符串

6

字符串.count(字符串)

统计字符串内某字符串的出现次数

7

len(字符串)

统计字符串的字符个数

字符串有哪些特点

  • 只可以存储字符串
  • 长度任意(取决于内存大小)
  • 支持下表索引
  • 允许重复字符串存在
  • 不可以修改(增加或删除元素等)
  • 支持for循环

练习题 - 分割字符串

给定一个字符串:“123itcainiao in cainiaojizhongying 我是 大大的 菜鸟321”

  • 统计字符串内有多少个“cainiao”字符
  • 将字符串内的空格,全部替换为字符:“|”
  • 并按照"|"进行字符串分割,得到列表

提示:

  • count、replace、split

"""

练习题 - 分割字符串

123itcainiao in cainiaojizhongying 我是 大大的 菜鸟321

"""

# 定义字符串

my_str = "123itcainiao in cainiaojizhongying 我是 大大的 菜鸟321"


# 统计字符串内有多少个“cainiao”字符

count = my_str.count('cainiao')

print(f"my_str字符串中的cainiao字符个数是:{count}")


# 将字符串内的空格,全部替换为字符:“|”

spt = my_str.replace(" ", "|")

print(f"my_str字符串将空格更换为 | 结果是:{spt}")


# 并按照"|"进行字符串分割,得到列表

my_str1 = "123itcainiao|in|cainiaojizhongying|我是|大大的|菜鸟321"

new_my_str = my_str1.split("|")

print(f"按照|进行字符串分割,得到的列表是:{new_my_str}")

数据容器的切片

序列

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

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

序列的常用操作 - 切片

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

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

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

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

  • 起始下标表示从何处开始,可以留空,留空视作从头开始。
  • 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾。
  • 步长表示,依次取出元素的间隔:

- 步长1表示,一个个取元素

- 步长2表示,每次跳过一个元素取

- 步长N表示,每次跳过N - 1个元素取

- 步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)

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

"""

数据容器-切片练习

"""


# 对list进行切片,从1开始,4结束,步长1

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

result1 = my_list[1:3:]

print(f"result1的切片结果是:{result1}")


# 对tuple进行切片,从头开始,到最后结束,步长1

my_tuple = (1, 2, 3, 4, 5, 6)

result2 = my_tuple[::]

print(f"result2的切片结果是:{result2}")


# 对str进行切片,从头开始,到最后结束,步长2

my_str = "0123456789"

result3 = my_str[::2]

print(f"result3的切片结果是:{result3}")


# 对str进行切片,从头开始,到最后结束,步长-1

my_str = "0123456789"

result4 = my_str[::-1]

print(f"result4的切片结果是:{result4}")


# 对列表进行切片,从3开始,到1结束,步长-1

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

result5 = my_list[3:1:-1]

print(f"result5的切片结果是:{result5}")


# 对元组进行切片,从头开始,到最后结束,步长-2

my_tuple = (1, 2, 3, 4, 5, 6)

result6 = my_tuple[::-2]

print(f"result6的切片结果是:{result6}")

总结

什么是序列

内容连接、有序,可使用下表索引的一类数据容器。

哪些数据容器可以视为序列?

列表、元组、字符串

序列如何做切片

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

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

  • 起始下标表示从何处开始,可以留空,留空视作从头开始。
  • 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾。
  • 步长表示,依次取出元素的间隔:

- 步长1表示,一个个取元素

- 步长2表示,每次跳过一个元素取

- 步长N表示,每次跳过N - 1个元素取

- 步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)

练习案例 - 序列的切片实践

有字符串:"月薪过万, 员序程鸟菜来, nohtyp学"

  • 请使用学过的任何方式,得到“菜鸟程序员”

可用方式参考:

  • 倒序字符串,切片取出;或切片取出,然后倒序
  • split分隔", " replace替换“来”为空,倒序字符串

"""

切片练习题

"月薪过万, 员序程鸟菜来, nohtyp学"

"""

# 定义字符串

my_str = "月薪过万, 员序程鸟菜来, nohtyp学"


# 倒序字符串,切片取出

result1 = my_str[10:5:-1]

print(f"倒序字符串,切片取出的结果是:{result1}")


# 切片取出,然后倒序

result2 = my_str[5:11:][::-1]

print(f"切片取出,然后倒序的结果是:{result2}")


# split分隔", " replace替换“来”为空,倒序字符串

result3 = my_str.split(",")[1].replace("来", "")[::-1]

print(f"split分隔’, ‘ replace替换“来”为空,倒序字符串的结果是:{result3}")

数据容器:set(集合)

为什么使用集合

我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景。

为何又需要学习新的集合类型呢?

通过特性来分析:

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

由上,可以看出列表、元组、字符串存在局限性,就是“支持重复元素且有序“。

如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。而集合,最主要的特点就是不支持元素的重复(自带去重功能)、并且内容无序。

集合的定义

基本语法:

# 定义集合字面量

{元素, 元素, ……, 元素}

# 定义集合变量

变量名称 = {元素, 元素, ……, 元素}

# 定义空集合

变量名称 = set()

和列表、元组、字符串等定义基本相同:

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

# 定义集合

my_set1 = {"Hello", "world", "itcainiao", "数据容器", "学习Python"}

print(f"my_set1集合的内容是:{my_set1},类型是:{type(my_set1)}")

输出结果:

my_set1集合的内容是:{'学习Python', 'Hello', '数据容器', 'itcainiao', 'world'},类型是:

# 定义空集合

my_set2 = set()

print(f"my_set2集合的内容是:{my_set2},类型是:{type(my_set2)}")

输出结果:

my_set2集合的内容是:set(),类型是:

集合的常用操作 - 修改

首先,因为集合是无序的,所以集合不支持:下表索引访问;但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法。

添加新元素

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

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

my_set = {"Hello", "world"}

my_set.add("itcainiao")

print(my_set) # 结果{"Hello", "world", "itcainiao"}

# 添加元素

my_set3 = {"Hello", "world", "itcainiao"}

my_set3.add("数据容器")

print(f"my_set3集合的内容是:{my_set3}")

输出结果:

my_set3集合的内容是:{'itcainiao', '数据容器', 'Hello', 'world'}

移除元素

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

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

my_set = {"Hello", "world", "itcainiao"}

my_set.remove("Hello")

print(my_set) # 结果{"world", "itcainiao"}

# 删除元素

my_set4 = {"Hello", "world", "itcainiao", "数据容器", "学习Python"}

my_set4.remove("学习Python")

print(f"my_set4集合的内容是:{my_set4}")

输出结果:

my_set4集合的内容是:{'Hello', '数据容器', 'itcainiao', 'world'}

从集合中随机取出元素

语法:集合.pop()

功能:从集合中随机取出一个元素。

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

# 随机取出一个元素

my_set5 = {"Hello", "world", "itcainiao", "数据容器", "学习Python"}

element = my_set5.pop()

print(f"my_set5集合随机取出一个元素的结果是:{element}")

输出结果:

my_set5集合随机取出一个元素的结果是:学习Python

清空集合

语法:集合.clear()

功能:清空集合

结果:集合本身被清空。

# 清空集合

my_set6 = {"Hello", "world", "itcainiao", "数据容器", "学习Python"}

my_set6.clear()

print(f"my_set6集合清空的结果是:{my_set6}")

输出结果:

my_set6集合清空的结果是:set()

取出2个集合的差集

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

功能:取出集合1和集合2的差集(集合1有而集合2没有的)

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

# 取2个集合的差集

set1 = {1, 2, 3}

set2 = {1, 5, 6}

set3 = set1.difference(set2)

print(f"取出差集后的结果是:{set3}")

print(f"取出差集后,原有set1的结果是:{set1}")

print(f"取出差集后,原有set2的结果是:{set2}")

输出结果:

取出差集后的结果是:{2, 3}

取出差集后,原有set1的结果是:{1, 2, 3}

取出差集后,原有set2的结果是:{1, 5, 6}

消除2个集合的差集

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

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

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

# 清除2个集合的差集

set1 = {1, 2, 3}

set2 = {1, 5, 6}

set1.difference_update(set2)

print(f"消除差集后,set1的结果是:{set1}")

print(f"消除差集后,set2的结果是:{set2}")

输出结果:

消除差集后,set1的结果是:{2, 3}

消除差集后,set2的结果是:{1, 5, 6}

2个集合合并

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

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

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

# 2个集合合并成1个

set1 = {1, 2, 3}

set2 = {1, 5, 6}

set3 = set1.union(set2)

print(f"2个集合合并的结果是:{set3}")

print(f"2个集合合并后,原有set1的结果是:{set1}")

print(f"2个集合合并后,原有set2的结果是:{set2}")

输出结果:

2个集合合并的结果是:{1, 2, 3, 5, 6}

2个集合合并后,原有set1的结果是:{1, 2, 3}

2个集合合并后,原有set2的结果是:{1, 5, 6}

统计集合元素数量

语法:len(集合)

功能:统计集合内元素的个数

结果:输出统计集合元素个数的结果。

# 统计集合元素数量

set = {1, 2, 3, 4, 5, 6, 7, 8, 9}

count = len(set)

print(f"集合内元素数量是:{count}")

输出结果:

集合内元素数量是:9

集合的遍历

注意:集合不支持下标索引,不能使用while循环。

可以使用for循环:

# 集合的遍历

set = {1, 2, 3, 4, 5,}

for i in set:

print(f"集合遍历的结果是:{i}")

输出结果:

集合遍历的结果是:1

集合遍历的结果是:2

集合遍历的结果是:3

集合遍历的结果是:4

集合遍历的结果是:5

集合常用功能总结


编号

操作

说明

1

集合.add(元素)

集合内添加一个元素

2

集合.remove(元素)

移除集合内指定的元素

3

集合.pop()

从集合中随机取出一个元素

4

集合.clear()

将集合清空

5

集合1.difference(集合2)

得到一个新集合,内含2个集合的差集,原有的2个集合内容不变。

6

集合1.difference_update(集合2)

在集合1中,删除集合2中存在的元素,集合1被修改,集合2不变。

7

集合1.union(集合2)

得到1个新集合,内含2个集合的全部元素,原有的2个集合内容不变。

8

len(集合)

得到一个整数,记录了集合的元素数量。

集合的特点

经过上述对集合的学习,可以总结出集合有如下特点:

  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是无序存储的(不支持下标索引)
  • 不允许重复数据存在
  • 可以修改(增加或删除元素等)
  • 支持for循环

总结

集合有哪些特点

  • 集合内不允许重复元素(去重)
  • 集合内元素是无序的(不支持下标索引)

集合的定义方式

{元素, 元素, ……, 元素}

集合的常用操作

编号

操作

说明

1

集合.add(元素)

集合内添加一个元素

2

集合.remove(元素)

移除集合内指定的元素

3

集合.pop()

从集合中随机取出一个元素

4

集合.clear()

将集合清空

5

集合1.difference(集合2)

得到一个新集合,内含2个集合的差集,原有的2个集合内容不变。

6

集合1.difference_update(集合2)

在集合1中,删除集合2中存在的元素,集合1被修改,集合2不变。

7

集合1.union(集合2)

得到1个新集合,内含2个集合的全部元素,原有的2个集合内容不变。

8

len(集合)

得到一个整数,记录了集合的元素数量。

如何遍历集合元素

  • 可以使用for循环进行遍历
  • 不可以使用while循环,因为不支持下标索引

集合的特点

  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是无序存储的(不支持下标索引)
  • 不允许重复数据存在
  • 可以修改(增加或删除元素等)
  • 支持for循环

练习题 - 信息去重

有如下列表对象:

my_list = ["Hello", "world", "itcainiao", "数据容器", "学习Python", "itcast", "itcast", "Hello", "world", "itcainiao"]

请:

  • 定义一个空集合
  • 通过for循环遍历列表
  • 在for循环中将列表的元素添加到集合
  • 最终得到元素去重后的集合对象,并打印输出

"""

信息去重

"""

# 定义集合

my_list = ["Hello", "world", "itcainiao", "数据容器", "学习Python", "itcast", "itcast", "Hello", "world", "itcainiao"]


# 定义空集合

my_set = set()


# for循环遍历列表,并添加到集合中

for i in my_list:

my_set.add(i)


print(f"列表的内容是:{my_list}")

print(f"通过for循环后,得到的集合对象是:{my_set}")

数据容器:dict(字典、映射)

字典的定义

为什么使用字典?

生活中的字典,如新华字典,可以通过【字】就能找到对应的【含义】;所以,我们可以认为,生活中的字典就是记录的一堆:

【字】:【含义】

【字】:【含义】

……

【字】:【含义】

Python中的字典和生活中的字典十分相像:

Key:Value

Key:Value

可以按【Key】找出对应的【Value】

示例

老师有一份名单,记录了学生的姓名和考试总成绩。

姓名

成绩

王力哄

77

周杰抡

88

林俊结

99

现在需要将其通过Python录入至程序中,并可以通过学生姓名检索学生的成绩。

使用字典最为合适:

{ Key Value

"王力哄":77

"周杰抡":88

"林俊结":99

}

可以通过Key(学生姓名),取到对应的Value(考试成绩);所以,为什么使用字典?因为可以使用字典,实现用Key取出Value的操作。

字典的定义

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

# 定义字典字面量

{key:value, key:value, ……, key:value}

# 定义字典变量

my_dict = {key:value, key:value, ……, key:value}

# 定义空字典

my_dict = {}

my_dict = dict()

# 定义字典字面量

my_dict1 = {"王力哄":77, "周杰抡":88, "林俊结":99}


# 定义空字典

my_dict2 = {}

my_dict3 = dict()

print(f"字典1的内容是:{my_dict1},类型是:{type(my_dict1)}")

print(f"字典2的内容是:{my_dict2},类型是:{type(my_dict2)}")

print(f"字典3的内容是:{my_dict3},类型是:{type(my_dict3)}")

# 定义重复key的字典

my_dict4 = {"王力哄":77, "王力哄":88, "林俊结":99}

print(f"重复key的字典内容是:{my_dict4}")

输出结果:

重复key的字典内容是:{'王力哄': 88, '林俊结': 99}

有重复key的字典,新的key会刷新前面的key。

字典数据的获取

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

语法:字典[key]可以取到对应的value

# 通过key取对应的value

my_dict5 = {"王力哄":77, "周杰抡":88, "林俊结":99}

print(my_dict5["王力哄"])

print(my_dict5["周杰抡"])

print(my_dict5["林俊结"])

输出结果:

77

88

99

字典的嵌套

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

需求如下:记录学生各科的考试信息。

姓名

语文

数学

英语

王力哄

77

66

88

周杰抡

88

55

77

林俊结

99

44

66

# 使用字典的嵌套,记录学生各科成绩

stu_score_dict = {

"王力哄":{

"语文":77,

"数学":66,

"英语":88

},

"周杰抡":{

"语文":88,

"数学":55,

"英语":77

},

"林俊结": {

"语文":99,

"数学":44,

"英语":66

}

}


print(f"学生的考试信息:{stu_score_dict}")


# 从嵌套字典中取数据

print(stu_score_dict["周杰抡"]["语文"])

score = stu_score_dict["林俊结"]["英语"]

print(f"林俊结的英语成绩是:{score}")

输出结果是:

学生的考试信息:{'王力哄': {'语文': 77, '数学': 66, '英语': 88}, '周杰抡': {'语文': 88, '数学': 55, '英语': 77}, '林俊结': {'语文': 99, '数学': 44, '英语': 66}}

88

林俊结的英语成绩是:66

总结

为什么使用字典?

字典可以提供基于key检索value的场景实现;就像查字典一样。

字典的定义语法

# 定义字典字面量

{key:value, key:value, ……, key:value}

# 定义字典变量

my_dict = {key:value, key:value, ……, key:value}

# 定义空字典

my_dict = {}

my_dict = dict()

字典的注意事项

  • 健值对的Key和Value可以是任意类型(Key不可为字典)
  • 字典内Key不允许重复,重复添加等同于覆盖原有数据
  • 字典不可用下标索引,而是通过Key检索Value

字典的常用操作

新增元素

语法:字典[Key] = Value

结果:字典被修改,新增了元素

# 定义学生成绩字典

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99

}

print(f"学生的成绩是:{stu_score}")


# 新增元素

stu_score["张雪友"] = 100

print(f"新增张雪友后stu_score字典的内容是:{stu_score}")

输出结果:

学生的成绩是:{'王力哄': 77, '周杰抡': 88, '林俊结': 99}

新增张雪友后stu_score字典的内容是:{'王力哄': 77, '周杰抡': 88, '林俊结': 99, '张雪友': 100}

更新元素

语法:字典[Key] = Value

结果:字典被修改,元素被更新。

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

# 定义学生成绩字典

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99

}

print(f"学生的成绩是:{stu_score}")


# 更新元素

stu_score["王力哄"] = 96

print(f"更新王力哄成绩后stu_score字典的内容是:{stu_score}")

输出结果:

学生的成绩是:{'王力哄': 77, '周杰抡': 88, '林俊结': 99}

更新王力哄成绩后stu_score字典的内容是:{'王力哄': 96, '周杰抡': 88, '林俊结': 99, '张雪友': 100}

删除元素

语法:字典.pop(Key)

结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除。

# 定义学生成绩字典

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99

}

print(f"学生的成绩是:{stu_score}")


# 删除元素

stu_score.pop("周杰抡")

print(f"字典stu_score删除周杰抡后的结果是:{stu_score}")

输出结果:

学生的成绩是:{'王力哄': 77, '周杰抡': 88, '林俊结': 99}

字典stu_score删除周杰抡后的结果是:{'王力哄': 96, '林俊结': 99, '张雪友': 100}

清空字典

语法:字典.clear()

结果:字典被修改,元素被清空。

# 定义学生成绩字典

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99

}

print(f"学生的成绩是:{stu_score}")


# 清空字典

stu_score.clear()

print(f"字典stu_score清空后的结果是:{stu_score}")

输出结果:

学生的成绩是:{'王力哄': 77, '周杰抡': 88, '林俊结': 99}

字典stu_score清空后的结果是:{}

获取全部的Key

语法:字典.keys()

结果:得到字典中的全部Key。

# 获取字典中全部的Key

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99,

"张雪友": 100

}

keys1 = stu_score.keys()

print(f"字典str_score全部的Key是:{keys1}")

输出结果:

字典str_score全部的Key是:dict_keys(['王力哄', '周杰抡', '林俊结', '张雪友'])

遍历字典

使用for循环进行遍历,因为字典中元素是无序的,所以无法使用while循环进行遍历。

方式1:通过获取全部的Key,来完成遍历。

# 通过获取全部的Key,来遍历字典

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99,

"张雪友": 100

}

keys = stu_score.keys()

for key in keys:

print(f"字典stu_score的Key是:{key}")

print(f"字典stu_score的Value是:{stu_score[key]}")

输出结果:

字典stu_score的Key是:王力哄

字典stu_score的Value是:77

字典stu_score的Key是:周杰抡

字典stu_score的Value是:88

字典stu_score的Key是:林俊结

字典stu_score的Value是:99

字典stu_score的Key是:张雪友

字典stu_score的Value是:100

方式2:直接对字典进行for循环,每一次循环就是直接得到Key。

# 对字典直接进行for循环,每一次循环都是直接得到Key

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99,

"张雪友": 100

}


for key in stu_score:

print(f"字典stu_score的Key是:{key}")

print(f"字典stu_score的Value是:{stu_score[key]}")

输出结果:

字典stu_score的Key是:王力哄

字典stu_score的Value是:77

字典stu_score的Key是:周杰抡

字典stu_score的Value是:88

字典stu_score的Key是:林俊结

字典stu_score的Value是:99

字典stu_score的Key是:张雪友

字典stu_score的Value是:100

获取字典中元素数量

语法:len(字典)

结果:获得字典元素数量。

# 统计字典中元素的数量

stu_score = {

"王力哄": 77,

"周杰抡": 88,

"林俊结": 99,

"张雪友": 100

}


count = len(stu_score)

print(f"字典stu_score中元素的个数是:{count}")

输出结果:

字典stu_score中元素的个数是:4

字典的常用操作总结

编号

操作

说明

1

字典[Key]

获取指定Key对应的Value值

2

字典[Key] = Value

添加或更新健值对

3

字典.pop(Key)

取出Key对应的Value并在字典内删除此Key的健值对

4

字典.clear()

清空字典

5

字典.keys()

获取字典的全部Key,可用于for循环遍历字典

6

len(字典)

计算字典内的元素数量

字典的特点

经过上述对字典的学习,可以总结出字典有如下特点:

  • 可以容纳多个数据
  • 可以容纳不同类型的数据
  • 每一份数据是Key Value健值对
  • 可以通过Key获取到Value,Key不可重复(重复会覆盖)
  • 不支持下标索引
  • 可以修改(增加、删除或更新元素等)
  • 支持for循环,不支持while循环

总结

字典的常用操作

编号

操作

说明

1

字典[Key]

获取指定Key对应的Value值

2

字典[Key] = Value

添加或更新健值对

3

字典.pop(Key)

取出Key对应的Value并在字典内删除此Key的健值对

4

字典.clear()

清空字典

5

字典.keys()

获取字典的全部Key,可用于for循环遍历字典

6

len(字典)

计算字典内的元素数量

操作注意

新增和更新元素的语法一致,如果Key不存在即新增,如果Key存在即更新(Key不可重复)

字典特点

  • 可以容纳多个数据
  • 可以容纳不同类型的数据
  • 每一份数据是Key Value健值对
  • 可以通过Key获取到Value,Key不可重复(重复会覆盖)
  • 不支持下标索引
  • 可以修改(增加、删除或更新元素等)
  • 支持for循环,不支持while循环

练习题 - 升职加薪

有如下员工信息,请使用字典完成数据的记录。

姓名

部门

工资

级别

王力哄

科技部

3000

1

周杰抡

市场部

5000

2

林俊结

市场部

7000

3

张雪友

科技部

4000

1

刘德花

市场部

6000

2

并通过for循环,对所有级别为1级的员工,级别上升1级,薪水增加1000元。

方法1:循环获取满足条件员工信息,定义新字典接受员工信息,升职加薪后再将员工信息更新到原字典中。

"""

某公司对员工进行升级加薪

"""

# 员工信息

personnel_dict = {

"王力哄": {

"部门": "科技部",

"工资": 3000,

"级别": 1

},

"周杰抡": {

"部门": "市场部",

"工资": 5000,

"级别": 2

},

"林俊结": {

"部门": "市场部",

"工资": 7000,

"级别": 3

},

"张雪友": {

"部门": "科技部",

"工资": 4000,

"级别": 1

},

"刘德花": {

"部门": "市场部",

"工资": 6000,

"级别": 2

}

}


print(f"全体员工当前信息:{personnel_dict}")


# 遍历员工,判断是否满足升职加薪,满足的进行升职加薪

for name in personnel_dict:

if personnel_dict[name]["级别"] == 1:

# 获取满足条件员工的信息字典

employee_personnel_dict = personnel_dict[name]

# 对满足条件的员工进行升职加薪

employee_personnel_dict["级别"] += 1

employee_personnel_dict["工资"] += 1000

# 将员工信息更新回personnel_dict

personnel_dict[name] = employee_personnel_dict

print(f"全体员工级别为1的员工升职加薪后的结果是:{personnel_dict}")

输出结果:

全体员工当前信息:{'王力哄': {'部门': '科技部', '工资': 3000, '级别': 1}, '周杰抡': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊结': {'部门': '市场部', '工资': 7000, '级别': 3}, '张雪友': {'部门': '科技部', '工资': 4000, '级别': 1}, '刘德花': {'部门': '市场部', '工资': 6000, '级别': 2}}

全体员工级别为1的员工升职加薪后的结果是:{'王力哄': {'部门': '科技部', '工资': 4000, '级别': 2}, '周杰抡': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊结': {'部门': '市场部', '工资': 7000, '级别': 3}, '张雪友': {'部门': '科技部', '工资': 5000, '级别': 2}, '刘德花': {'部门': '市场部', '工资': 6000, '级别': 2}}

方法2:直接对原字典进行修改

"""

某公司对员工进行升级加薪

"""

# 员工信息

personnel_dict = {

"王力哄": {

"部门": "科技部",

"工资": 3000,

"级别": 1

},

"周杰抡": {

"部门": "市场部",

"工资": 5000,

"级别": 2

},

"林俊结": {

"部门": "市场部",

"工资": 7000,

"级别": 3

},

"张雪友": {

"部门": "科技部",

"工资": 4000,

"级别": 1

},

"刘德花": {

"部门": "市场部",

"工资": 6000,

"级别": 2

}

}


print(f"全体员工当前信息:{personnel_dict}")


# 遍历员工,判断是否满足升职加薪,满足的进行升职加薪

for name in personnel_dict:

if personnel_dict[name]["级别"] == 1:

personnel_dict[name]["级别"] += 1

personnel_dict[name]["工资"] += 1000


print(f"全体员工级别为1的员工升职加薪后的结果是:{personnel_dict}")


输出结果:

全体员工当前信息:{'王力哄': {'部门': '科技部', '工资': 3000, '级别': 1}, '周杰抡': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊结': {'部门': '市场部', '工资': 7000, '级别': 3}, '张雪友': {'部门': '科技部', '工资': 4000, '级别': 1}, '刘德花': {'部门': '市场部', '工资': 6000, '级别': 2}}

全体员工级别为1的员工升职加薪后的结果是:{'王力哄': {'部门': '科技部', '工资': 4000, '级别': 2}, '周杰抡': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊结': {'部门': '市场部', '工资': 7000, '级别': 3}, '张雪友': {'部门': '科技部', '工资': 5000, '级别': 2}, '刘德花': {'部门': '市场部', '工资': 6000, '级别': 2}}

数据容器的总结对比

数据容器分类

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

  • 是否支持下标索引

- 支持(序列类型):列表、元组、字符串

- 不支持(非序列类型):集合、字典

  • 是否支持重复元素

- 支持(序列类型):列表、元组、字符串

- 不支持(非序列类型):集合、字典

  • 是否可以修改

- 支持:列表、集合、字典

- 不支持:元组、字符串

数据容器特点对比


列表

元组

字符串

集合

字典

元素数量

支持多个

支持多个

支持多个

支持多个

支持多个

元素类型

任意

任意

仅字符

任意

Key: Value

Key:除字典外任意类型

Value:任意类型

下标索引

支持

支持

支持

不支持

不支持

重复元素

支持

支持

支持

不支持

不支持

可修改性

支持

不支持

不支持

支持

支持

数据有序

使用场景

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

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

一串字符的记录场景

不可重复的数据记录场景

以Key检索Value的数据记录场景

总结

基于各类数据容器的特点,它们的应用场景如下:

  • 列表:一批数据,可修改,可重复的存储场景
  • 元组:一批数据,不可修改,可重复的存储场景
  • 字符串:一串字符串的存储场景
  • 集合:一批数据,去重存储场景
  • 字典:一批数据,可用Key检索Value的存储场景

数据容器的通用操作

数据容器的通用操作 - 遍历

数据容器尽管各自有各自的特点,但是他们也有通用的一些操作。

首先,在遍历上:

  • 5类数据容器都支持for循环遍历
  • 列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)

尽管遍历的形式各有不同,但是,它们都支持遍历操作。

数据容器的通用操作 - 统计功能

统计容器的元素个数

语法:len(容器)

# len统计元素数量

my_list = [1, 2, 3, 4, 5]

my_tuple = (1, 2, 3, 4, 5)

my_str = "itcainiao"

my_set = {1, 2, 3, 4, 5}

my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}


print(f"列表 元素的个数有:{len(my_list)}")

print(f"元组 元素的个数有:{len(my_tuple)}")

print(f"字符 串元素的个数有:{len(my_str)}")

print(f"集合 元素的个数有:{len(my_set)}")

print(f"字典 元素的个数有:{len(my_dict)}")

输出结果:

列表 元素的个数有:5

元组 元素的个数有:5

字符串 元素的个数有:9

集合 元素的个数有:5

字典 元素的个数有:5

统计容器的最大元素

语法:max(容器)

# max取最大值

my_list = [1, 2, 3, 4, 5]

my_tuple = (1, 2, 3, 4, 5)

my_str = "itcainiao"

my_set = {1, 2, 3, 4, 5}

my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}


print(f"列表 最大的元素是:{max(my_list)}")

print(f"元组 最大的元素是:{max(my_tuple)}")

print(f"字符串 最大的元素是:{max(my_str)}")

print(f"集合 最大的元素是:{max(my_set)}")

print(f"字典 最大的元素是:{max(my_dict)}")

输出结果:

列表 最大的元素是:5

元组 最大的元素是:5

字符串 最大的元素是:t

集合 最大的元素是:5

字典 最大的元素是:key5

统计容器的最小元素

语法:min(容器)

# min取最小值

my_list = [1, 2, 3, 4, 5]

my_tuple = (1, 2, 3, 4, 5)

my_str = "itcainiao"

my_set = {1, 2, 3, 4, 5}

my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}


print(f"列表 最小的元素是:{min(my_list)}")

print(f"元组 最小的元素是:{min(my_tuple)}")

print(f"字符串 最小的元素是:{min(my_str)}")

print(f"集合 最小的元素是:{min(my_set)}")

print(f"字典 最小的元素是:{min(my_dict)}")


输出结果:

列表 最小的元素是:1

元组 最小的元素是:1

字符串 最小的元素是:a

集合 最小的元素是:1

字典 最小的元素是:key1

容器的通用操作 - 转换功能

将给定容器转换为列表

语法:list(容器)

my_list = [1, 2, 3, 4, 5]

my_tuple = (1, 2, 3, 4, 5)

my_str = "itcainiao"

my_set = {1, 2, 3, 4, 5}

my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}


print(f"列表 转换为列表的结果是:{list(my_list)}")

print(f"元组 转换为列表的结果是:{list(my_tuple)}")

print(f"字符串 转换为列表的结果是:{list(my_str)}")

print(f"集合 转换为列表的结果是:{list(my_set)}")

print(f"字典 转换为列表的结果是:{list(my_dict)}")

输出结果:

列表 转换为列表的结果是:[1, 2, 3, 4, 5]

元组 转换为列表的结果是:[1, 2, 3, 4, 5]

字符串 转换为列表的结果是:['i', 't', 'c', 'a', 'i', 'n', 'i', 'a', 'o']

集合 转换为列表的结果是:[1, 2, 3, 4, 5]

字典 转换为列表的结果是:['key1', 'key2', 'key3', 'key4', 'key5']

将给定容器转换为元组

语法:tuple(容器)

# 将给定容器转换为元组

my_list = [1, 2, 3, 4, 5]

my_tuple = (1, 2, 3, 4, 5)

my_str = "itcainiao"

my_set = {1, 2, 3, 4, 5}

my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}


print(f"列表 转换为元组的结果是:{tuple(my_list)}")

print(f"元组 转换为元组的结果是:{tuple(my_tuple)}")

print(f"字符串 转换为元组的结果是:{tuple(my_str)}")

print(f"集合 转换为元组的结果是:{tuple(my_set)}")

print(f"字典 转换为元组的结果是:{tuple(my_dict)}")

输出结果:

列表 转换为元组的结果是:(1, 2, 3, 4, 5)

元组 转换为元组的结果是:(1, 2, 3, 4, 5)

字符串 转换为元组的结果是:('i', 't', 'c', 'a', 'i', 'n', 'i', 'a', 'o')

集合 转换为元组的结果是:(1, 2, 3, 4, 5)

字典 转换为元组的结果是:('key1', 'key2', 'key3', 'key4', 'key5')

将给定容器转换为字符串

语法:str(容器)

# 将给定容器转换为字符串

my_list = [1, 2, 3, 4, 5]

my_tuple = (1, 2, 3, 4, 5)

my_str = "itcainiao"

my_set = {1, 2, 3, 4, 5}

my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}


print(f"列表 转换为字符串的结果是:{str(my_list)}")

print(f"元组 转换为字符串的结果是:{str(my_tuple)}")

print(f"字符串 转换为字符串的结果是:{str(my_str)}")

print(f"集合 转换为字符串的结果是:{str(my_set)}")

print(f"字典 转换为字符串的结果是:{str(my_dict)}")

输出结果:

列表 转换为字符串的结果是:[1, 2, 3, 4, 5]

元组 转换为字符串的结果是:(1, 2, 3, 4, 5)

字符串 转换为字符串的结果是:itcainiao

集合 转换为字符串的结果是:{1, 2, 3, 4, 5}

字典 转换为字符串的结果是:{'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5}

将给定容器转换为集合

语法:set(容器)

# 将给定容器转换为集合

my_list = [1, 2, 3, 4, 5]

my_tuple = (1, 2, 3, 4, 5)

my_str = "itcainiao"

my_set = {1, 2, 3, 4, 5}

my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}


print(f"列表 转换为集合的结果是:{set(my_list)}")

print(f"元组 转换为集合的结果是:{set(my_tuple)}")

print(f"字符串 转换为集合的结果是:{set(my_str)}")

print(f"集合 转换为集合的结果是:{set(my_set)}")

print(f"字典 转换为集合的结果是:{set(my_dict)}")

输出结果:

列表 转换为集合的结果是:{1, 2, 3, 4, 5}

元组 转换为集合的结果是:{1, 2, 3, 4, 5}

字符串 转换为集合的结果是:{'i', 'a', 'c', 'n', 'o', 't'}

集合 转换为集合的结果是:{1, 2, 3, 4, 5}

字典 转换为集合的结果是:{'key1', 'key3', 'key2', 'key4', 'key5'}

容器通用排序功能

语法:sorted(容器, [reverse=True])

将给定的容器进行排序。

# 将给定的容器进行排序

my_list = [3, 1, 4, 2, 5]

my_tuple = (5, 3, 1, 2, 4)

my_str = "itcainiao"

my_set = {2, 5, 3, 1, 4}

my_dict = {"key5": 1, "key3": 2, "key2": 3, "key1": 4, "key4": 5}


print(f"列表 排序后的结果是:{sorted(my_list)}")

print(f"元组 排序后的结果是:{sorted(my_tuple)}")

print(f"字符串 排序后的结果是:{sorted(my_str)}")

print(f"集合 排序后的结果是:{sorted(my_set)}")

print(f"字典 排序后的结果是:{sorted(my_dict)}")

输出结果:

列表 排序后的结果是:[1, 2, 3, 4, 5]

元组 排序后的结果是:[1, 2, 3, 4, 5]

字符串 排序后的结果是:['a', 'a', 'c', 'i', 'i', 'i', 'n', 'o', 't']

集合 排序后的结果是:[1, 2, 3, 4, 5]

字典 排序后的结果是:['key1', 'key2', 'key3', 'key4', 'key5']

# 将给定的容器进行降序排序

my_list = [3, 1, 4, 2, 5]

my_tuple = (5, 3, 1, 2, 4)

my_str = "itcainiao"

my_set = {2, 5, 3, 1, 4}

my_dict = {"key5": 1, "key3": 2, "key2": 3, "key1": 4, "key4": 5}


print(f"列表 降序排序后的结果是:{sorted(my_list, reverse=True)}")

print(f"元组 降序排序后的结果是:{sorted(my_tuple, reverse=True)}")

print(f"字符串 降序排序后的结果是:{sorted(my_str, reverse=True)}")

print(f"集合 降序排序后的结果是:{sorted(my_set, reverse=True)}")

print(f"字典 降序排序后的结果是:{sorted(my_dict, reverse=True)}")

输出结果:

列表 降序排序后的结果是:[5, 4, 3, 2, 1]

元组 降序排序后的结果是:[5, 4, 3, 2, 1]

字符串 降序排序后的结果是:['t', 'o', 'n', 'i', 'i', 'i', 'c', 'a', 'a']

集合 降序排序后的结果是:[5, 4, 3, 2, 1]

字典 降序排序后的结果是:['key5', 'key4', 'key3', 'key2', 'key1']

容器通用功能总览

功能

描述

通用for循环

遍历容器(字典是遍历key)

max()

容器内最大的元素

min()

容器内最小的元素

len()

容器元素个数

list()

转换为列表

tuple()

转换为元组

str()

转换为字符串

set()

转换为集合

sorte(序列, [reverse=True])

排序,reverse=True表示降序

得到一个排好序的列表

字符串大小比较

ASCII码表

在程序中,字符串所有的所有字符如:

  • 大小写英文单词
  • 数字
  • 特殊符号(!、\、|、@、#、空格等)

都有其对应的ASCII码表值。

每一个字符都能对应上一个:数字的码值。

字符串进行比较就是基于数字的码值大小进行比较的。

ASCII编码即美国信息交换标准代码(American Standard Code for Information Interchange)是一套共有128个字符的编码,它基于阿拉丁字母,主要作用是用来表示英语和西欧语言字符。ASCII规范编码第一次公布于1967年,ascii码在1986年完成最后一次更新。ASCII码对照表等同于国际标准 ISO/IEC 646,ASCII码对照表是世界最通用的信息交换标准。

ASCII控制字符对照表

0 - 31,共32个。ASCII码对照表0~31之间的ASCII码常用于控制像打印机一样的外围设备。

十进制

八进制

十六进制

二进制

符号

HTML实体

说明

0

000

00

00000000

NUL

空字符

1

001

01

00000001

SOH



标题开始

2

002

02

00000010

STX



正文开始

3

003

03

00000011

ETX



正文结束

4

004

04

00000100

EOT



传输结束

5

005

05

00000101

ENQ



询问

6

006

06

00000110

ACK



收到通知

7

007

07

00000111

BEL



8

010

08

00001000

BS



退格

9

011

09

00001001

HT


水平制表符

10

012

0A

00001010

LF


换行键

11

013

0B

00001011

VT


垂直制表符

12

014

0C

00001100

FF


换页键

13

015

0D

00001101

CR


回车键

14

016

0E

00001110

SO



移出

15

017

0F

00001111

SI



移入

16

020

10

00010000

DLE



数据链路转义

17

021

11

00010001

DC1



设备控制 1

18

022

12

00010010

DC2



设备控制 2

19

023

13

00010011

DC3



设备控制 3

20

024

14

00010100

DC4



设备控制 4

21

025

15

00010101

NAK



拒绝接收

22

026

16

00010110

SYN



同步空闲

23

027

17

00010111

ETB



传输块结束

24

030

18

00011000

CAN



取消

25

031

19

00011001

EM



介质中断

26

032

1A

00011010

SUB



替换

27

033

1B

00011011

ESC



换码符

28

034

1C

00011100

FS



文件分隔符

29

035

1D

00011101

GS



组分隔符

30

036

1E

00011110

RS



记录分离符

31

037

1F

00011111

US



单元分隔符

ASCII可显示字符对照表

32 - 127,共96个。ASCII码对照表32~127之间的ASCII码表示的符号,在我们的键盘上都可以被找到。其中:32表示空格,127表示删除命令。

十进制

八进制

十六进制

二进制

符号

HTML实体

说明

128

200

80

10000000

欧盟符号

129

201

81

10000001

130

202

82

10000010

单低 9 引号

131

203

83

10000011

ƒ

ƒ

带钩的


拉丁小写字母f

132

204

84

10000100

双低 9 引号

133

205

85

10000101

水平省略号

134

206

86

10000110

剑号

135

207

87

10000111

双剑号

136

210

88

10001000

ˆ

ˆ

修正字符


抑扬音符号

137

211

89

10001001

千分号

138

212

8A

10001010

Š

Š

带弯音号的


拉丁大写字母 S

139

213

8B

10001011

左单书名号

140

214

8C

10001100

Œ

Œ

拉丁大写组合 OE

141

215

8D

10001101

142

216

8E

10001110

Ž

Ž

带弯音号的


拉丁大写字母 z

143

217

8F

10001111

144

220

90

10010000

145

221

91

10010001

左单引号

146

222

92

10010010

右单引号

147

223

93

10010011

左双引号

148

224

94

10010100

右双引号

149

225

95

10010101

150

226

96

10010110

半长破折号

151

227

97

10010111

全长破折号

152

230

98

10011000

˜

˜

小波浪线

153

231

99

10011001

154

232

9A

10011010

š

š

带弯音号的


拉丁小写字母 s

155

233

9B

10011011

右单书名号

156

234

9C

10011100

œ

œ

拉丁小写组合 oe

157

235

9D

10011101

158

236

9E

10011110

ž

ž

带弯音号的


拉丁小写字母 z

159

237

9F

10011111

Ÿ

Ÿ

带弯音号的


拉丁大写字母 Y

160

240

A0

10100000


161

241

A1

10100001

¡

¡

反向感叹号

162

242

A2

10100010

¢

¢

分币符号

163

243

A3

10100011

£

£

英磅符号

164

244

A4

10100100

¤

¤

165

245

A5

10100101

¥

¥

人民币符号

166

246

A6

10100110

¦

¦

167

247

A7

10100111

§

§

章节符号

168

250

A8

10101000

¨

¨

通用货币符号

169

251

A9

10101001

©

©

版权符号

170

252

AA

10101010

ª

ª

阴性顺序


指示符号

171

253

AB

10101011

«

«

左角引号

172

254

AC

10101100

¬

¬

173

255

AD

10101101

­

­

174

256

AE

10101110

®

®

175

257

AF

10101111

¯

¯

176

260

B0

10110000

°

°

温度符号

177

261

B1

10110001

±

±

加/减号

178

262

B2

10110010

²

²

上标 2

179

263

B3

10110011

³

³

上标 3

180

264

B4

10110100

´

´

181

265

B5

10110101

µ

µ

微符号

182

266

B6

10110110

段落符号,


pilcrow

183

267

B7

10110111

·

·

中点

184

270

B8

10111000

¸

¸

185

271

B9

10111001

¹

¹

上标 1

186

272

BA

10111010

º

º

阳性顺序


指示符

187

273

BB

10111011

»

»

右角引号

188

274

BC

10111100

¼

¼

分数四分之一

189

275

BD

10111101

½

½

分数二分之一

190

276

BE

10111110

¾

¾

191

277

BF

10111111

¿

¿

反向问号

192

300

C0

11000000

À

À

带重音符


的大写字母 A

193

301

C1

11000001

Á

Á

带尖锐重音


的大写字母 A

194

302

C2

11000010

Â

Â

带音调符号


的大写字母 A

195

303

C3

11000011

Ã

Ã

带代字号


的大写字母 A

196

304

C4

11000100

Ä

Ä

带元音变音


(分音符号)


的大写字母 A

197

305

C5

11000101

Å

Å

带铃声


的大写字母 A

198

306

C6

11000110

Æ

Æ

大写字母 AE


双重元音

199

307

C7

11000111

Ç

Ç

带变音符号


的大写字母 C

200

310

C8

11001000

È

È

带重音符


的大写字母 E

201

311

C9

11001001

É

É

带尖锐重音


的大写字母 E

202

312

CA

11001010

Ê

Ê

带音调符号


的大写字母 E

203

313

CB

11001011

Ë

Ë

带元音变音


(分音符号)


的大写字母 E

204

314

CC

11001100

Ì

Ì

带重音符


的大写字母 I

205

315

CD

11001101

Í

Í

带尖锐重音


的大写字母 I

206

316

CE

11001110

Î

Î

带音调符号


的大写字母 I

207

317

CF

11001111

Ï

Ï

带元音变音


(分音符号)


的大写字母 I

208

320

D0

11010000

Ð

Ð

209

321

D1

11010001

Ñ

Ñ

带代字号


的大写字母 N

210

322

D2

11010010

Ò

Ò

带重音符


的大写字母 O

211

323

D3

11010011

Ó

Ó

带尖锐重音


的大写字母 O

212

324

D4

11010100

Ô

Ô

带音调符号


的大写字母 O

213

325

D5

11010101

Õ

Õ

带代字号


的大写字母 O

214

326

D6

11010110

Ö

Ö

带元音变音


(分音符号)


的大写字母 O

215

327

D7

11010111

×

×

大写字母


OE 连字

216

330

D8

11011000

Ø

Ø

带斜杠


的大写字母 O

217

331

D9

11011001

Ù

Ù

带重音符


的大写字母 U

218

332

DA

11011010

Ú

Ú

带尖锐重音


的大写字母 U

219

333

DB

11011011

Û

Û

带音调符号


的大写字母 U

220

334

DC

11011100

Ü

Ü

带元音变音


(分音符号)


的大写字母 U

221

335

DD

11011101

Ý

Ý

带元音变音


(分音符号)


的大写字母 Y

222

336

DE

11011110

Þ

Þ

223

337

DF

11011111

ß

ß

德语高调


小写字母 s

224

340

E0

11100000

à

à

带重音符


的小写字母 a

225

341

E1

11100001

á

á

带尖锐重音


的小写字母 a

226

342

E2

11100010

â

â

带音调符号


的小写字母 a

227

343

E3

11100011

ã

ã

带代字号


的小写字母 a

228

344

E4

11100100

ä

ä

带元音变音


(分音符号)


的小写字母 a

229

345

E5

11100101

å

å

带铃声的


小写字母 a

230

346

E6

11100110

æ

æ

小写字母 ae


双重元音

231

347

E7

11100111

ç

ç

带变音符号


的小写字母 c

232

350

E8

11101000

è

è

带重音符


的小写字母 e

233

351

E9

11101001

é

é

带尖锐重音


的小写字母 e

234

352

EA

11101010

ê

ê

带音调符号


的小写字母 e

235

353

EB

11101011

ë

ë

带元音变音


(分音符号)


的小写字母 e

236

354

EC

11101100

ì

ì

带重音符


的小写字母 i

237

355

ED

11101101

í

í

带尖锐重音


的小写字母 i

238

356

EE

11101110

î

î

带音调符号


的小写字母 i

239

357

EF

11101111

ï

ï

带元音变音


(分音符号)


的小写字母 i

240

360

F0

11110000

ð

ð

241

361

F1

11110001

ñ

ñ

带代字号


的小写字母 n

242

362

F2

11110010

ò

ò

带重音符


的小写字母 o

243

363

F3

11110011

ó

ó

带尖锐重音


的小写字母 o

244

364

F4

11110100

ô

ô

带音调符号


的小写字母 o

245

365

F5

11110101

õ

õ

带代字号


的小写字母 o

246

366

F6

11110110

ö

ö

带元音变音


(分音符号)


的小写字母 o

247

367

F7

11110111

÷

÷

小写字母 oe


连字

248

370

F8

11111000

ø

ø

带斜杠


的小写字母 o

249

371

F9

11111001

ù

ù

带重音符


的小写字母 u

250

372

FA

11111010

ú

ú

带尖锐重音


的小写字母 u

251

373

FB

11111011

û

û

带音调符号


的小写字母 u

252

374

FC

11111100

ü

ü

带元音变音


(分音符号)


的小写字母 u

253

375

FD

11111101

ý

ý

带元音变音


(分音符号)


的小写字母 y2

254

376

FE

11111110

þ

þ

255

377

FF

11111111

ÿ

ÿ

ASCII码对照表的ASCII编码范围0x00-0x7F,即十进制的0-127,定义了128个字符。ASCII码对照表包含了33个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符(数字、字母、符号)。国标码 GB18030、国际码Unicode均兼容ASCII编码。

字符串比较

字符串是按位比较,也就是一位位进行对比,只要有一位大,那么整体就大。

案例1:

字符串:abc

字符串:abd

比较结果:abd > abc

案例2:

字符串:a

字符串:ab

比较结果:ab > a

# ab与a比较大小

print(f"ab 与 a 的比较结果是:{'ab' > 'a'}")


# a与A比较大小

print(f"a 与 A 的比较结果是:{'a' > 'A'}")


# key2与key1比较大小

print(f"key2 与 key1 的比较结果是:{'key2' > 'key1'}")

输出结果:

ab 与 a 的比较结果是:True

a 与 A 的比较结果是:True

key2 与 key1 的比较结果是:True

总结

字符串如何比较

从头到尾,一位位进行比较,其中一位大,后面就无需比较了。

单个字符之间如何确定大小?

通过ASCII码表,确定字符对应的码值数字来确定大小。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  eHipUjOuzYYH   2023年12月07日   12   0   0 数据乐观锁redis
  jnZtF7Co41Wg   2023年12月09日   15   0   0 客户端服务端数据