Advertisement

python学习笔记:基础知识(二)

阅读量:

第二部分:基础知识(二)

高级变量类型

目标

  • 列表
  • 元组
  • 字典
  • 字符串
  • 公共方法
  • 变量高级

知识点回顾

  • Python 中数据类型主要分为 数字型非数字型
  • 数字型
  • 整数类型 (int)
  • 浮点数(float
  • 布尔值(bool
  • True 表示非零值,则非零值即为 True 状态
  • False 表示零值
  • 复数形式 (complex)
  • 常用于科学计算领域,在如平面场问题、波动问题以及涉及电感电容等问题中广泛应用
  • 非数字型
  • 字符串类型
  • 列表形式
  • 元组结构
  • 字典格式

在Python语言中,非数字型变量具备以下关键特性:

  1. 它们都是一个序列对象(sequence object),亦可被视为一种容器结构
  2. 可进行索引运算(indexing),其结果是空方括号[]
  3. 配备完整的遍历操作(遍历操作使用for in语法结构)
  4. 提供以下功能:获取长度信息(length)、进行比较运算(comparison)、执行删除操作(deletion)以及获取最大值与最小值信息
  5. 支持连接运算符+和重复运算符*的操作
  6. 切片操作也是其基本功能之一

01. 列表

1.1 列表的定义

  • 它是一种在Python中最常用的容器类型,在其他编程语言中常被称作数组或序列容器。
  • 专为存储一系列信息而设计。
  • 使用[ ]符号来定义列表,并且其内部元素之间采用,进行分隔。
  • 其索引值从零开始计算。
  • 索引即表示数据在其列表中的位置编号,并被称作下标。

注意:从列表中取值时,如果 超出索引范围,程序会报错

python 复制代码
name_list = ["zhangsan", "lisi", "wangwu"]  
001_列表示意图

1.2 列表常用操作

  • 在 IPython 3 环境中创建一个 列表(例如:name_list = [])
  • 输入 name_list. 后按下 Tab 键
  • 按 Tab 键后, IPython 会提示该 列表 可用的 方法 如下:
复制代码
In [1]: name_list.  
name_list.append name_list.count name_list.insert name_list.reverse  
name_list.clear name_list.extend name_list.pop name_list.sort  
name_list.copy name_list.index name_list.remove  
序号 分类 关键字 / 函数 / 方法 说明
1 增加 列表.insert(索引, 数据) 在指定位置插入数据

| | | 列表.append(数据) | 在末尾追加数据

列表.extend(列表2) 将列表2 的数据追加到列表
3 删除 del 列表[索引] 删除指定索引的数据
列表.remove[数据] 删除第一个出现的指定数据
列表.pop 删除末尾数据
列表.pop(索引) 删除指定索引数据
列表.clear 清空列表
4 统计 len(列表) 列表长度
列表.count(数据) 数据在列表中出现的次数
5 排序 列表.sort() 升序排序
列表.sort(reverse=True) 降序排序
列表.reverse() 逆序、反转

del 关键字(科普)

  • 也可采用 delete 关键字(delete)实现对列表内元素的删除操作
  • 该关键字的作用是 从内存空间中释放所指针所指向的对象空间
  • 若在执行完相关操作后不再需要该变量时调用此关键字,则会导致后续代码无法访问该变量
python 复制代码
del name_list[1]  

在日常开发中,要从列表删除数据,建议 使用列表提供的方法

关键字、函数和方法(科普)

  • 关键字 是 Python 内置的、具有特殊意义的标识符
python 复制代码
In [1]: import keyword  
In [2]: print(keyword.kwlist)  
In [3]: print(len(keyword.kwlist))  

关键字后面不需要使用括号

  • 函数 封装了独立功能,可以直接调用
python 复制代码
函数名(参数)  

函数需要死记硬背

  • 功能块 和函数相仿,在本质上实现了功能模块的封装
  • 该方法被指定用于操作该对象,并赋予该对象执行特定操作的能力
python 复制代码
对象.方法名(参数)  

向变量后附加一个点号(通常用符号.表示),然后指定针对该变量的操作内容;与使用函数相比,这种操作方式更为简便。

1.3 循环遍历

  • 遍历过程即按顺序逐个从列表中获取数据。

  • 在循环过程中对每个元素进行处理。

  • 在 Python 语言中特别针对列表遍历效率的优化需求而特别提供了一种称为 迭代 iteration 遍历 的机制

  • 通过 for 语法结构就能完成列表逐项访问的过程

python 复制代码
# for 循环内部使用的变量 in 列表  
for name in name_list:

循环内部针对列表元素进行操作  
print(name)
002_forin循环流程图-w420

1.4 应用场景

  • 虽然 Python 列表能够存储不同类型的元素
  • 在实际开发过程中
    1. 通常情况下 Python 列表会存储具有相同数据类型的元素
    2. 利用迭代遍历技术 对每个元素依次执行相同的操作

02. 元组

2.1 元组的定义

  • Tuple(元组)与列表类似,在列表中无法修改其成员的不同在于元组成员无法修改。
  • 元组表示由若干成员组成的有序序列。
  • 在Python编程中存在特定的应用场景。
  • 用于存储一组数据,在这些数据之间使用逗号分隔开的信息。
  • 元组通常通过圆括号来定义。
  • 元祖的索引值从零开始计数。
  • 索引值即为数据在其元祖中的位置编号。
python 复制代码
info_tuple = ("zhangsan", 18, 1.75)  

创建空元组

python 复制代码
info_tuple = ()  

元组中 只包含一个元素 时,需要 在元素后面添加逗号

python 复制代码
info_tuple = (50, )  
003_元组示意图-w500

2.2 元组常用操作

  • 通过使用代码块语法,在 Python 3 环境中创建一个 元组
  • 输入命令行提示符并按下回车键后,“ipython” 将会显示可用的 元组 函数列表。
python 复制代码
info.count info.index  

有关 元组常用操作 可以参照上图练习

2.3 循环遍历

  • 获取数据的方式是从元组中取得特定位置的数据
  • 遍历操作即为逐一按照顺序访问元组中的各个元素
python 复制代码
# for 循环内部使用的变量 in 元组  
for item in info:

循环内部针对元组元素进行操作  
print(item)
  • 在 Python 环境中, 可以通过 for 循环结构来遍历所有的非数字类型变量, 具体包括 列表, 元组, 字典, 以及 字符串
  • 建议在实际开发场景中, 通常情况下, 只有当能够明确确定元组中的元素数据类型时, 才有必要进行针对元组的循环遍历操作. 其他情况下, 针对元组的循环遍历需求相对较少

2.4 应用场景

虽然可以通过 for in 迭代器处理 元组对象,
在实际开发过程中,则面临更为多样化的场景:
支持接收零个或多个参数,并能返回单个或多个数据类型。
后续章节将深入探讨这一重要概念。
格式字符串中的括号部分等同于一个元组结构,
为了确保列表无法进行修改操作。

python 复制代码
info = ("zhangsan", 18)

print("%s 的年龄是 %d" % info)

元组和列表之间的转换

  • 使用 list 函数可以把元组转换成列表
python 复制代码
list(元组)  
  • 使用 tuple 函数可以把列表转换成元组
python 复制代码
tuple(列表)  

03. 字典

3.1 字典的定义

  • map(映射)是最灵活的数据类型之一,在除列表以外的 Python 类型中应用广泛
  • 字典能够存储多种类型的元素
  • 它通常用于存储与某个事物相关的各种信息
  • 列表与字典的主要区别在于:
    • 列表是一个有序的对象集合
    • 字典是一个无序的对象集合
  • 字典通过花括号 {} 定义
  • 在字典中使用键-值对来组织数据,在逗号 , 分隔下将这些对连接起来
  • 键称为 key(键),而对应的数值称为 value(值)
  • 键与 value 使用冒号 : 连接起来作为键-值对
  • 每个 key 必须唯一存在以避免冲突
  • value 可以取任何类型的数据;然而,在 Python 中允许使用的 key 类型仅限于字符串、数字或元组
python 复制代码
xiaoming = {"name": "小明",  
"age": 18,  
"gender": True,  
"height": 1.75}  
002_字典示意图

3.2 字典常用操作

  • 通过 ipython3 创建一个 dictionary ,例如:xiaoming = {}
  • 当输入 xiaoming. 并按下回车键时,
  • 按下 Tab 键后,“ipython” 会提示该 dictionary 可用的函数如下:
复制代码
In [1]: xiaoming.  
xiaoming.clear xiaoming.items xiaoming.setdefault  
xiaoming.copy xiaoming.keys xiaoming.update  
xiaoming.fromkeys xiaoming.pop xiaoming.values  
xiaoming.get xiaoming.popitem  

有关 字典常用操作 可以参照上图练习

3.3 循环遍历

  • 遍历 就是 依次字典 中获取所有键值对
python 复制代码
# for 循环内部使用的 `key 的变量` in 字典  
for k in xiaoming:

print("%s: %s" % (k, xiaoming[k]))  

说明:在开发过程中,在实际应用中,
因为各个键值对存储的数据类型各有不同,
所以无需频繁处理字典的循环遍历操作,
其需求并不算很高

3.4 应用场景

虽然可以采用 for in 方式来进行 字典 的遍历操作。
在开发环境中存在更多复杂的应用场景。
除了存储单个 物体 的关键信息外,在实际应用中还经常需要管理多个键值对以描述更为复杂的对象状态。
当将一组 字典 存储在一个列表中时,在循环过程中会对每个 字典 进行同样的处理逻辑。

python 复制代码
card_list = [{"name": "张三",  
"qq": "12345",  
"phone": "110"},  
{"name": "李四",  
"qq": "54321",  
"phone": "10086"}  
]

04. 字符串

4.1 字符串的定义

  • 字符串即是单个字符序列,在编程语言中被用作表示文本的数据类型
  • 在Python环境中可通过一对双引号" "或一对单引号' '来标识一个字符串
  • 尽管可以通过转义序列如"或'来进行特殊字符处理但在实际开发过程中
  • 当需要在双引号内引用单引号时应改用单引号外层包裹
  • 当需要在单引号内引用双引号时应改用双引号外层包裹
  • 可以利用索引来按指定位置提取相应字符其中索引从零开始计数
  • 另外可以通过for循环依次处理每个字符实现完整遍历过程

大多数编程语言都是用 " 来定义字符串

python 复制代码
string = "Hello Python"

for c in string:  
print(c)
005_字符串示意图-w500

4.2 字符串的常用操作

  • ipython3 中定义一个 string对象 ,例如:hello_str = ""
  • 输入 hello_str. 并回车后按下 Tab 键,则 ipython 会提示 string对象 能够使用的 方法 如下:
复制代码
In [1]: hello_str.  
hello_str.capitalize hello_str.isidentifier hello_str.rindex  
hello_str.casefold hello_str.islower hello_str.rjust  
hello_str.center hello_str.isnumeric hello_str.rpartition  
hello_str.count hello_str.isprintable hello_str.rsplit  
hello_str.encode hello_str.isspace hello_str.rstrip  
hello_str.endswith hello_str.istitle hello_str.split  
hello_str.expandtabs hello_str.isupper hello_str.splitlines  
hello_str.find hello_str.join hello_str.startswith  
hello_str.format hello_str.ljust hello_str.strip  
hello_str.format_map hello_str.lower hello_str.swapcase  
hello_str.index hello_str.lstrip hello_str.title  
hello_str.isalnum hello_str.maketrans hello_str.translate  
hello_str.isalpha hello_str.partition hello_str.upper  
hello_str.isdecimal hello_str.replace hello_str.zfill  
hello_str.isdigit hello_str.rfind  

背景说明:归功于Python内置方法的丰富多样,为开发提供了极大的便利。为字符串操作提供了高度灵活的解决方案。从而能够轻松应对各种复杂的开发需求!

1) 判断类型 - 9

方法 说明
string.isspace() 如果 string 中只包含空格,则返回 True
string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True
string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True
string.isdecimal() 如果 string 只包含数字则返回 True,全角数字
string.isdigit() 如果 string 只包含数字则返回 True,全角数字\u00b2
string.isnumeric() 如果 string 只包含数字则返回 True,全角数字汉字数字
string.istitle() 如果 string 是标题化的(每个单词的首字母大写)则返回 True
string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True
string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True

2) 查找和替换 - 7

方法 说明
string.startswith(str) 检查字符串是否是以 str 开头,是则返回 True
string.endswith(str) 检查字符串是否是以 str 结束,是则返回 True
string.find(str, start=0, end=len(string)) 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
string.rfind(str, start=0, end=len(string)) 类似于 find(),不过是从右边开始查找
string.index(str, start=0, end=len(string)) 跟 find() 方法类似,不过如果 str 不在 string 会报错
string.rindex(str, start=0, end=len(string)) 类似于 index(),不过是从右边开始
string.replace(old_str, new_str, num=string.count(old)) 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次

3) 大小写转换 - 5

方法 说明
string.capitalize() 把字符串的第一个字符大写
string.title() 把字符串的每个单词首字母大写
string.lower() 转换 string 中所有大写字符为小写
string.upper() 转换 string 中的小写字母为大写
string.swapcase() 翻转 string 中的大小写

4) 文本对齐 - 3

方法 说明
string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

5) 去除空白字符 - 3

方法 说明
string.lstrip() 截掉 string 左边(开始)的空白字符
string.rstrip() 截掉 string 右边(末尾)的空白字符
string.strip() 截掉 string 左右两边的空白字符

6) 拆分和连接 - 5

方法 说明
string.partition(str) 把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面)
string.rpartition(str) 类似于 partition() 方法,不过是从右边开始查找
string.split(str="", num) 以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 '\r', '\t', '\n' 和空格
string.splitlines() 按照行('\r', '\n', '\r\n')分隔,返回一个包含各行作为元素的列表
string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

4.3 字符串的切片

  • 切片操作支持字符串、列表以及元组类型。
    • 切片基于索引值限定范围,在较大的字符串中提取出较小的部分。
    • 列表和元组包括一系列有序的数据项,在指定位置可以通过索引值访问对应的数据项。
    • 字典由键值对存储数据而非按照顺序排列。
006_字符串索引示意图
复制代码
字符串[开始索引:结束索引:步长]  

注意

1. 所指的区间以 左闭右开区间表示法 表示为 [开始索引, 结束索引) ,即满足 开始索引 >= 范围 < 结束索引

  • 起始位置 开始操作 ,一直到 结束位置 之前
    2. 切片操作中 ,起始索引值 的数值可选可不填 ,但 冒号符号必须存在
    3. 在切片操作中 ,若无明确指定,则默认以 末尾位置点作为切片终点
    4. 步长参数默认设置为 1 ,当连续执行切片操作时 ,可省略步长参数中的数值与冒号符号

索引的顺序和倒序

  • 在Python中除了常规的顺序索引用法外,还提供了倒序索引用法。
  • 倒序索引即为从字符串的末尾开始逆序计算。
  • 通常将最右边的位置设定为-1,并按照逆序依次递减。

演练需求

    1. 在字符2到字符5之间的区间内提取字符串
    1. 在字符2到子串结尾之间的区间内提取子串
    1. 在子串开头至字符5之间的区间内提取子串
    1. 完整地提取整个字符串
    1. 按每隔一的位置间隔从起始位置提取各个字符
    1. 按照起始索引1并以每隔一的位置间隔依次抽取每个单个字符
    1. 提取出自于字符2至最后一个前一位的子串
    1. 完整地获取最后两位的子串内容

答案

复制代码
num_str = "0123456789"

# 1. 截取从 2 ~ 5 位置 的字符串  
print(num_str[2:6])

# 2. 截取从 2 ~ `末尾` 的字符串  
print(num_str[2:])

# 3. 截取从 `开始` ~ 5 位置 的字符串  
print(num_str[:6])

# 4. 截取完整的字符串  
print(num_str[:])

# 5. 从开始位置,每隔一个字符截取字符串  
print(num_str[::2])

# 6. 从索引 1 开始,每隔一个取一个  
print(num_str[1::2])

# 倒序切片  
# -1 表示倒数第一个字符  
print(num_str[-1])

# 7. 截取从 2 ~ `末尾 - 1` 的字符串  
print(num_str[2:-1])

# 8. 截取字符串末尾两个字符  
print(num_str[-2:])

# 9. 字符串的逆序(面试题)  
print(num_str[::-1])

05. 公共方法

5.1 Python 内置函数

Python 包含了以下内置函数:

函数 描述 备注
len(item) 计算容器中元素个数
del(item) 删除变量 del 有两种方式
max(item) 返回容器中元素最大值 如果是字典,只针对 key 比较
min(item) 返回容器中元素最小值 如果是字典,只针对 key 比较
cmp(item1, item2) 比较两个值,-1 小于/0 相等/1 大于 Python 3.x 取消了 cmp 函数

注意

  • 字符串 比较符合以下规则: "0" < "A" < "a"

5.2 切片

描述 Python 表达式 结果 支持的数据类型
切片 "0123456789"[::-2] "97531" 字符串、列表、元组
  • 切取指定范围内的内容,在较大的字符串中提取出较小的字符串段。
  • 列表和元组都是有序的数据结构,在它们都支持的情况下能够通过索引值访问相应的数据元素。
  • 字典是一个无序的键-值对存储结构。

5.3 运算符

运算符 Python 表达式 结果 描述 支持的数据类型
+ [1, 2] + [3, 4] [1, 2, 3, 4] 合并 字符串、列表、元组
* ["Hi!"] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复 字符串、列表、元组
in 3 in (1, 2, 3) True 元素是否存在 字符串、列表、元组、字典
not in 4 not in (1, 2, 3) True 元素是否不存在 字符串、列表、元组、字典
> >= == < <= (1, 2, 3) < (2, 2, 3) True 元素比较 字符串、列表、元组

注意

  • in 在对 字典 操作时,判断的是 字典的键
  • innot in 被称为 成员运算符

成员运算符

成员运算符用于 测试 序列中是否包含指定的 成员

运算符 描述 实例
in 如果在指定的序列中找到值返回 True,否则返回 False 3 in (1, 2, 3) 返回 True
not in 如果在指定的序列中没有找到值返回 True,否则返回 False 3 not in (1, 2, 3) 返回 False

注意:在对 字典 操作时,判断的是 字典的键

5.4 完整的 for 循环语法

  • Python 中完整的 for 循环 的语法如下:
python 复制代码
for 变量 in 集合:  
  
循环体代码  
else:  
没有通过 break 退出循环,循环结束后,会执行的代码  

应用场景

当处理包含嵌套结构的数据时,在逐层遍历集合中的元素时,请注意以下要点:
需求是确认特定值是否存在于某个字典中。
如果发现存在目标值则应立即终止循环。
若未找到所需值,则应在遍历结束后统一进行提示。

python 复制代码
students = [  
{"name": "阿土",  
"age": 20,  
"gender": True,  
"height": 1.7,  
"weight": 75.0},  
{"name": "小美",  
"age": 19,  
"gender": False,  
"height": 1.6,  
"weight": 45.0},  
]

find_name = "阿土"

for stu_dict in students:

print(stu_dict)

# 判断当前遍历的字典中姓名是否为find_name  
if stu_dict["name"] == find_name:  
print("找到了")

# 如果已经找到,直接退出循环,就不需要再对后续的数据进行比较  
break

else:  
print("没有找到")

print("循环结束")

全部评论 (0)

还没有任何评论哟~