Python-3.12.0文档解读-内置函数sorted()详细说明+记忆策略+常用场景+巧妙用法+综合技巧


一个认为一切根源都是“自己不够强”的INTJ

个人主页:用哲学编程-CSDN博客
专栏:每日一题——举一反三
Python编程学习
Python内置函数

Python-3.12.0文档解读

目录

Python-3.12.0文档解读详细说明

功能描述

参数说明

用法示例

备注

进阶用法

参考资料

记忆策略

常用场景

示例1:基本排序

示例2:逆序排序

示例3:根据字符串长度排序

示例4:对包含字典的列表进行排序

示例5:多重排序(先按部门,再按薪资)

示例6:对元组列表进行排序

示例7:排序包含混合大小写字符串的列表

巧妙用法

技巧1:排序自定义对象列表

技巧2:按多个条件进行复杂排序

技巧3:对嵌套结构进行排序

技巧4:使用 sorted() 进行字符串排列组合

技巧5:根据条件过滤并排序

技巧6:自定义排序顺序(非标准排序)

综合技巧

技巧1:结合 sorted() 和 zip()对多个列表进行同步排序

技巧2:结合 sorted() 和 itertools.groupby() 对数据进行分组

技巧3:结合 sorted() 和 enumarate() 对带索引的数据进行排序

技巧4:结合 sorted() 和 set() 对集合进行排序

技巧5:结合 sorted() 和 pandas 库对数据框进行排序

技巧6:结合 sorted() 和 functools.cmp_to_key() 实现自定义复杂排序



详细说明

sorted(iterable, /, *, key=None, reverse=False)

功能描述

sorted() 函数根据 iterable 中的项返回一个新的已排序列表。

参数说明

  • iterable: 要排序的可迭代对象,如列表、元组、字符串等。
  • key (可选): 指定一个带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键。例如,key=str.lower 将按照忽略大小写的字母顺序进行排序。默认值为 None,即直接比较元素。
  • reverse (可选): 一个布尔值。如果设为 True,则每个列表元素将按反向顺序进行排序。默认值为 False。

用法示例

# 按默认顺序排序
sorted_list = sorted([5, 2, 3, 1, 4])
print(sorted_list)  # 输出: [1, 2, 3, 4, 5]# 按反向顺序排序
sorted_list = sorted([5, 2, 3, 1, 4], reverse=True)
print(sorted_list)  # 输出: [5, 4, 3, 2, 1]# 使用 key 参数进行排序
sorted_list = sorted(["bob", "Alice", "eve"], key=str.lower)
print(sorted_list)  # 输出: ['Alice', 'bob', 'eve']

备注

  1. sorted() 函数确保排序是稳定的。稳定排序意味着不会改变比较结果相等的元素的相对顺序,这对于多重排序非常有用(例如,先按部门、再按薪级排序)。
  2. 排序算法只使用 < 运算符在项目之间进行比较。虽然定义一个 __lt__() 方法就足以进行排序,但 PEP 8 建议实现所有六个富比较运算符 (__lt__, __le__, __eq__, __ne__, __gt__, __ge__)。这将有助于避免在与其他排序工具(如 max())使用相同的数据时出现错误,因为这些工具依赖于不同的底层方法。实现所有六个比较运算符也有助于避免混合类型比较的混乱,因为混合类型比较可以调用反射到 __gt__() 的方法。

进阶用法

  • 使用 functools.cmp_to_key(): 如果你有一个老式的比较函数(cmp 函数),可以使用 functools.cmp_to_key() 将其转换为 key 函数,以便与 sorted() 一起使用。
from functools import cmp_to_keydef compare(x, y):if x < y:return -1elif x > y:return 1else:return 0sorted_list = sorted([5, 2, 3, 1, 4], key=cmp_to_key(compare))
print(sorted_list)  # 输出: [1, 2, 3, 4, 5]

参考资料

  • PEP 8 - Python 代码风格指南(https://peps.python.org/pep-0008/)
  • 排序指南(https://docs.python.org/zh-cn/3/howto/sorting.html)

记忆策略


函数名的含义:
sorted 是 sort 的过去分词形式,表示“已排序的”。这一点暗示了这个函数的作用是返回一个排序后的新列表。


常用场景

示例1:基本排序

# 原始列表包含未排序的数字
numbers = [4, 2, 9, 1, 5, 6]# 使用 sorted() 对列表进行排序,返回一个新的已排序列表
sorted_numbers = sorted(numbers)# 输出排序后的新列表
print(sorted_numbers)  # 输出: [1, 2, 4, 5, 6, 9]

示例2:逆序排序

# 原始列表包含未排序的数字
numbers = [4, 2, 9, 1, 5, 6]# 使用 sorted() 并设置 reverse=True 对列表进行逆序排序
sorted_numbers_desc = sorted(numbers, reverse=True)# 输出逆序排序后的新列表
print(sorted_numbers_desc)  # 输出: [9, 6, 5, 4, 2, 1]

示例3:根据字符串长度排序

# 原始列表包含不同长度的字符串
words = ["apple", "banana", "cherry", "date"]# 使用 sorted() 并设置 key 参数为 len 函数,对字符串长度进行排序
sorted_by_length = sorted(words, key=len)# 输出按长度排序后的新列表
print(sorted_by_length)  # 输出: ['date', 'apple', 'banana', 'cherry']

示例4:对包含字典的列表进行排序

# 原始列表包含字典,每个字典代表一个人及其年龄
people = [{"name": "John", "age": 25},{"name": "Jane", "age": 22},{"name": "Dave", "age": 30}
]# 使用 sorted() 并设置 key 参数为一个 lambda 函数,按年龄进行排序
sorted_by_age = sorted(people, key=lambda person: person["age"])# 输出按年龄排序后的新列表
print(sorted_by_age)
# 输出: [{'name': 'Jane', 'age': 22}, {'name': 'John', 'age': 25}, {'name': 'Dave', 'age': 30}]

示例5:多重排序(先按部门,再按薪资)

# 原始列表包含字典,每个字典代表一个员工及其部门和薪资
employees = [{"name": "John", "department": "HR", "salary": 5000},{"name": "Jane", "department": "Engineering", "salary": 7000},{"name": "Dave", "department": "HR", "salary": 6000},{"name": "Anna", "department": "Engineering", "salary": 6500}
]# 使用 sorted() 进行多重排序,先按部门排序,再按薪资排序
sorted_employees = sorted(employees, key=lambda emp: (emp["department"], emp["salary"]))# 输出按部门和薪资排序后的新列表
print(sorted_employees)
# 输出:
# [{'name': 'Anna', 'department': 'Engineering', 'salary': 6500},
#  {'name': 'Jane', 'department': 'Engineering', 'salary': 7000},
#  {'name': 'John', 'department': 'HR', 'salary': 5000},
#  {'name': 'Dave', 'department': 'HR', 'salary': 6000}]

示例6:对元组列表进行排序

# 原始列表包含元组,每个元组代表一个学生及其分数
students = [("John", 88),("Jane", 92),("Dave", 85)
]# 使用 sorted() 并设置 key 参数为一个 lambda 函数,按分数进行排序
sorted_by_score = sorted(students, key=lambda student: student[1])# 输出按分数排序后的新列表
print(sorted_by_score)
# 输出: [('Dave', 85), ('John', 88), ('Jane', 92)]

示例7:排序包含混合大小写字符串的列表

# 原始列表包含混合大小写的字符串
words = ["banana", "Apple", "cherry", "Date"]# 使用 sorted() 并设置 key 参数为 str.lower,对字符串进行不区分大小写的排序
sorted_case_insensitive = sorted(words, key=str.lower)# 输出按不区分大小写排序后的新列表
print(sorted_case_insensitive)  # 输出: ['Apple', 'banana', 'cherry', 'Date']

巧妙用法

sorted() 函数在 Python 中不仅仅是一个简单的排序工具,还可以通过一些巧妙的使用技巧来实现更复杂的操作。以下是一些一般人可能想不到的使用技巧,它们展示了 sorted() 函数的强大和灵活性:

技巧1:排序自定义对象列表

可以通过 sorted() 函数和自定义的 key 函数对自定义对象列表进行排序。

# 定义一个自定义类
class Person:def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return f"{self.name} ({self.age})"# 创建一个 Person 对象的列表
people = [Person("John", 25), Person("Jane", 22), Person("Dave", 30)]# 使用 sorted() 对 Person 对象列表按年龄进行排序
sorted_people = sorted(people, key=lambda person: person.age)# 输出排序后的 Person 对象列表
print(sorted_people)  # 输出: [Jane (22), John (25), Dave (30)]

技巧2:按多个条件进行复杂排序

可以使用多个 key 条件来对数据进行复杂排序,例如先按一个条件排序,再按另一个条件排序。

# 原始列表包含字典,每个字典代表一个员工及其部门和薪资
employees = [{"name": "John", "department": "HR", "salary": 5000},{"name": "Jane", "department": "Engineering", "salary": 7000},{"name": "Dave", "department": "HR", "salary": 6000},{"name": "Anna", "department": "Engineering", "salary": 6500}
]# 使用 sorted() 进行多重排序,先按部门排序,再按薪资排序
sorted_employees = sorted(employees, key=lambda emp: (emp["department"], emp["salary"]))# 输出按部门和薪资排序后的新列表
print(sorted_employees)
# 输出:
# [{'name': 'Anna', 'department': 'Engineering', 'salary': 6500},
#  {'name': 'Jane', 'department': 'Engineering', 'salary': 7000},
#  {'name': 'John', 'department': 'HR', 'salary': 5000},
#  {'name': 'Dave', 'department': 'HR', 'salary': 6000}]

技巧3:对嵌套结构进行排序

可以通过 sorted() 对嵌套的数据结构(例如列表中的列表或字典中的字典)进行排序。

# 原始列表包含嵌套的列表,每个子列表代表一个人的信息
nested_list = [["John", {"age": 25}],["Jane", {"age": 22}],["Dave", {"age": 30}]
]# 使用 sorted() 并设置 key 参数为一个 lambda 函数,对嵌套的 age 进行排序
sorted_nested_list = sorted(nested_list, key=lambda item: item[1]["age"])# 输出按年龄排序后的嵌套列表
print(sorted_nested_list)
# 输出: [['Jane', {'age': 22}], ['John', {'age': 25}], ['Dave', {'age': 30}]]

技巧4:使用 sorted() 进行字符串排列组合

可以使用 sorted() 函数对字符串中的字符进行排序,从而生成所有字符的排列组合。

# 原始字符串
s = "python"# 将字符串转换为字符列表并使用 sorted() 进行排序
sorted_chars = sorted(s)# 将排序后的字符列表重新组合成字符串
sorted_string = ''.join(sorted_chars)# 输出排序后的字符串
print(sorted_string)  # 输出: 'hnopty'

技巧5:根据条件过滤并排序

可以结合列表解析和 sorted() 函数,根据特定条件对数据进行过滤并排序。

# 原始列表包含未排序的数字
numbers = [4, 2, 9, 1, 5, 6, 10, 3]# 使用列表解析和 sorted() 对大于 5 的数字进行排序
sorted_filtered_numbers = sorted([n for n in numbers if n > 5])# 输出过滤并排序后的新列表
print(sorted_filtered_numbers)  # 输出: [6, 9, 10]

技巧6:自定义排序顺序(非标准排序)

可以通过自定义的排序顺序来对数据进行排序,例如按特定规则对字符串排序。

# 自定义的排序顺序
order = {'low': 0, 'medium': 1, 'high': 2}# 原始列表包含不同优先级的字符串
priority = ["medium", "high", "low", "medium", "low", "high"]# 使用 sorted() 并设置 key 参数为查找自定义排序顺序的值进行排序
sorted_priority = sorted(priority, key=lambda x: order[x])# 输出按自定义顺序排序后的新列表
print(sorted_priority)  # 输出: ['low', 'low', 'medium', 'medium', 'high', 'high']

这些技巧展示了 sorted() 函数的灵活性和强大功能,通过巧妙的使用,可以实现许多复杂的数据排序任务。


综合技巧

结合 sorted() 函数和其他函数或方法,可以实现一些非常巧妙和复杂的操作。以下是几个非常巧妙的组合用法示例:

技巧1:结合 sorted() 和 zip()对多个列表进行同步排序

当有多个相关联的列表时,可以使用 zip() 将它们合并,然后使用 sorted() 进行同步排序,最后再解压缩回来。

# 原始列表
names = ["John", "Jane", "Dave"]
ages = [25, 22, 30]
salaries = [5000, 7000, 6000]# 使用 zip() 将多个列表合并成一个列表的元组
combined = list(zip(names, ages, salaries))# 使用 sorted() 对合并后的列表按年龄进行排序
sorted_combined = sorted(combined, key=lambda x: x[1])# 使用 zip(*iterable) 解压缩回多个列表
sorted_names, sorted_ages, sorted_salaries = zip(*sorted_combined)# 输出排序后的结果
print(sorted_names)      # 输出: ('Jane', 'John', 'Dave')
print(sorted_ages)       # 输出: (22, 25, 30)
print(sorted_salaries)   # 输出: (7000, 5000, 6000)

技巧2:结合 sorted() 和 itertools.groupby() 对数据进行分组

可以使用 sorted() 函数对数据进行排序,然后使用 itertools.groupby() 对数据进行分组。

import itertools# 原始列表包含字典,每个字典代表一个员工及其部门和薪资
employees = [{"name": "John", "department": "HR", "salary": 5000},{"name": "Jane", "department": "Engineering", "salary": 7000},{"name": "Dave", "department": "HR", "salary": 6000},{"name": "Anna", "department": "Engineering", "salary": 6500}
]# 使用 sorted() 按部门排序
sorted_employees = sorted(employees, key=lambda x: x['department'])# 使用 itertools.groupby() 对排序后的结果按部门进行分组
grouped_employees = itertools.groupby(sorted_employees, key=lambda x: x['department'])# 输出分组后的结果
for department, group in grouped_employees:print(department)for employee in group:print(employee)
# 输出:
# Engineering
# {'name': 'Jane', 'department': 'Engineering', 'salary': 7000}
# {'name': 'Anna', 'department': 'Engineering', 'salary': 6500}
# HR
# {'name': 'John', 'department': 'HR', 'salary': 5000}
# {'name': 'Dave', 'department': 'HR', 'salary': 6000}

技巧3:结合 sorted() 和 enumarate() 对带索引的数据进行排序

可以使用 sorted() 函数结合 enumerate() 对带有索引的数据进行排序。

# 原始列表包含未排序的数字
numbers = [4, 2, 9, 1, 5, 6]# 使用 enumerate() 为每个元素添加索引,然后使用 sorted() 按值进行排序
sorted_with_index = sorted(enumerate(numbers), key=lambda x: x[1])# 输出排序后的结果,包含原始索引
print(sorted_with_index)
# 输出: [(3, 1), (1, 2), (0, 4), (4, 5), (5, 6), (2, 9)]

技巧4:结合 sorted() 和 set() 对集合进行排序

可以使用 sorted() 函数对集合(set)进行排序,因为集合是无序的。

# 原始集合包含未排序的数字
numbers_set = {4, 2, 9, 1, 5, 6}# 使用 sorted() 对集合进行排序,返回一个列表
sorted_numbers = sorted(numbers_set)# 输出排序后的列表
print(sorted_numbers)  # 输出: [1, 2, 4, 5, 6, 9]

技巧5:结合 sorted() 和 pandas 库对数据框进行排序

如果使用 pandas 库处理数据,可以结合 sorted() 函数对数据框进行排序。

import pandas as pd# 创建一个 DataFrame
data = {'name': ['John', 'Jane', 'Dave', 'Anna'],'age': [25, 22, 30, 28]
}
df = pd.DataFrame(data)# 使用 sorted() 对 DataFrame 按年龄排序
sorted_df = df.loc[sorted(df.index, key=lambda x: df.loc[x, 'age'])]# 输出排序后的 DataFrame
print(sorted_df)
# 输出:
#    name  age
# 1  Jane   22
# 0  John   25
# 3  Anna   28
# 2  Dave   30

技巧6:结合 sorted() 和 functools.cmp_to_key() 实现自定义复杂排序

可以使用 functools.cmp_to_key() 函数将自定义比较函数转换为 sorted() 函数可接受的 key 函数,从而实现复杂的自定义排序。

from functools import cmp_to_key# 自定义比较函数
def compare(a, b):# 按绝对值大小进行比较return abs(a) - abs(b)# 原始列表包含正负数
numbers = [4, -2, -9, 1, -5, 6]# 使用 sorted() 和 cmp_to_key() 对列表按绝对值进行排序
sorted_numbers = sorted(numbers, key=cmp_to_key(compare))# 输出排序后的列表
print(sorted_numbers)  # 输出: [1, -2, 4, -5, 6, -9]

这些巧妙的组合用法展示了 sorted() 函数在与其他函数和方法结合使用时的强大功能。通过这些技巧,可以实现更加复杂和灵活的数据操作。


感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】【模型视图架构】代理模型示例

文章目录 1. 基本排序/过滤模型Basic Sort/Filter Model Example2. 自定义排序/过滤模型Custom Sort/Filter Model ExampleFilterLineEdit类定义及实现MySortFilterProxyModel类定义及实现 1. 基本排序/过滤模型Basic Sort/Filter Model Example 官方提供的基本排序/过滤模型示…

【算法】贪心算法——柠檬水找零

题解&#xff1a;柠檬水找零(贪心算法) 目录 1.题目2.题解3.参考代码4.证明5.总结 1.题目 题目链接&#xff1a;LINK 2.题解 分情况讨论 贪心算法 当顾客为5元时&#xff0c;收下当顾客为10元时&#xff0c;收下10元并找回5元当顾客为20元时&#xff0c;收下20元并找回10…

大泽动力车载柴油发电机的特点和优势有哪些

大泽动力车载柴油发电机具有一系列显著的特点和优势&#xff0c;以下是对其的详细介绍&#xff1a; 低噪音性能&#xff1a;大泽动力车载柴油发电机具备明显的低噪音性能&#xff0c;其噪音限值在距离机组7米处测得为70dB(A)&#xff0c;这为用户提供了一个相对安静的工作环境…

Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发 家政服务(师傅端)介绍

Java18​App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码&#xff0c;一站式家政服务平台开发 家政服务&#xff08;师傅端&#xff09;介绍 家政服务师傅端是一个专为家政服务人员设计的平台&#xff0c;该平台旨在提供便捷、高效的工作机会&#xff0c;同时确保…

html期末复习速览

一.基础标签 1.段落标签<p></p> 特点&#xff1a;分段分割 2.标题标签<h1></h1>……<h6></h6> 特点&#xff1a;文字加粗&#xff0c;单独占一行 3.换行标签<br /> 特点&#xff1a;单标签&#xff0c;强制换行 二.文本格式化…

View->Bitmap缩放到自定义ViewGroup的任意区域(Matrix方式绘制Bitmap)

Bitmap缩放和平移 加载一张Bitmap可能为宽高相同的正方形&#xff0c;也可能为宽高不同的矩形缩放方向可以为中心缩放&#xff0c;左上角缩放&#xff0c;右上角缩放&#xff0c;左下角缩放&#xff0c;右下角缩放Bitmap中心缩放&#xff0c;包含了缩放和平移两个操作&#xf…

SpringBoot 多模块 多环境 项目 单元测试

环境描述 假设项目中有以下三个yml文件&#xff1a; application.ymlapplication-dev.ymlapplication-prod.yml 假设项目各Module之间依赖关系如下&#xff1a; 其中&#xff0c;D依赖C&#xff0c;C依赖B&#xff0c;B依赖A&#xff0c;D对外提供最终的访问接口 现在要想采…

“两客一危”车辆综合监控信息化产品及应用分析

引言 随着科技的不断进步和社会的发展&#xff0c;“两客一危”车辆&#xff08;即长途客车、旅游包车和危险品运输车&#xff09;的安全监管问题日益凸显。为了提升车辆的安全性能和管理效率&#xff0c;综合监控信息化产品应运而生。本文将对这一产品进行详细介绍&#xff0…

像艺术家一样工作

接下来开始翻译这本小册子 豆瓣评分还是挺高的&#xff0c;目前在国内没有看到有在售的翻译版本 书名直译的话是&#xff1a;像艺术家一样去偷 作者可能是为了制造营销话题&#xff0c;所以起了这么一个名字 但是偷这个词总归不太体面&#xff0c;所以我把书名翻译为&#…

随便用css换个渐变的太阳

来源于GPT4o&#xff1a;代码来源 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>渐变色上半圆…

零基础构建基于LangChain的聊天机器人(3)

检索对象 review_chain的目标是回答有关患者在医院就医体验的问题。到目前为止&#xff0c;已经将患者对医院的评论作为问题的上下文。虽然能回答少量问题&#xff0c;但它不具有很好的扩展性。此外&#xff0c;即使将所有评论放入模型的上下文中&#xff0c;也不能保证它使用…

QT天气预报项目(写在简历上)

一、ui设计 实现功能:可以搜索不同的城市进行天气的查询,并且显示未来7天内的天气,并绘制出当天的最高气温和最低气温曲线图。 学到的知识: stylesheet界面美化 Json数据解析 HTTP通信get请求 使用事件过滤器绘制温度曲线 多控件处理(利用数组) 代码整合调试能力 二…

线程思维导图

列出线程所有知识的框架结构&#xff0c;帮助理解线程相关知识&#xff0c;有更好的知识体系 Java相关进阶知识 多线程相关知识&#xff0c;超详细&#xff0c;易懂

windows上进行git初始化时报错:fatal: unknown write failure on standard output

一、报错描述 1、git init命令一般是在命令行&#xff0c;切换到项目的根目录后执行 2、如果是windows的系统&#xff0c;我们粘贴路径时&#xff0c;需要进行转义命令行才能识别&#xff0c; 也就是像我下面写的 D:\\Users\\...3、报错信息进行解读 一般情况下&#xff0c;…

Pytorch-Lighting使用教程(MNIST为例)

一、pytorch-lighting简介 1.1 pytorch-lighting是什么 pytorch-lighting&#xff08;简称pl&#xff09;&#xff0c;基于 PyTorch 的框架。它的核心思想是&#xff0c;将学术代码&#xff08;模型定义、前向 / 反向、优化器、验证等&#xff09;与工程代码&#xff08;for-…

Anthropic公司CEO谈AI发展:Cluade安全超过商业利益

Anthropic公司今年3月发布的超越GPT-4模型Claude3 opus&#xff0c;成功吸引了大量GPT-4用户“叛变”。 作为OpenAI的头号劲敌&#xff0c;Claude3发布方Anthropic公司的联合创始人兼CEO&#xff0c;达里奥阿莫迪&#xff08;DarioAmodei&#xff09;承诺&#xff1a;在能够制…

生信分析进阶4 - 比对结果的FLAG和CIGAR信息含义与BAM文件指定区域提取

BAM文件时存储比对数据的常用格式&#xff0c;可用于短reads和长reads数据。BAM是二进制压缩格式&#xff0c;SAM文件为其纯文本格式&#xff0c;CRAM为BAM的高压缩格式&#xff0c;IO效率相比于BAM略差&#xff0c;但是占用存储空间更小。 1. BAM文件的比对信息 BAM的核心信…

用c语言实现通讯录

目录 静态简易通讯录 代码&#xff1a; 功能模块展示&#xff1a; 设计思路&#xff1a; 动态简易通讯录&#xff08;本质顺序表&#xff09; 代码&#xff1a; 扩容模块展示&#xff1a; 设计思路&#xff1a; 文件版本通讯录 代码&#xff1a; 文件模块展示&#x…

SJ705C安全帽高温预处理箱

一、仪器用途 安全帽高温预处理箱是我公司根据安全帽新国家标准检测试验要求而自主设计研发制造。是安全帽检测前做高温预处理的专用设备。 二、仪器特征 1、有PID自整定温度控制仪&#xff0c;控制准确。 2、数显计时、计温器。 3、石英灯管加热系统;。 …

Android 调试桥_ADB命令

Android 调试桥 ADB全称 【Android Debug Bridge】 是Android SDK中的一个命令行工具&#xff0c;adb命令可以直接操作管理Android模拟器或真实的Android设备&#xff08;手机&#xff09; ADB的工作原理 启动一个 adb 客户端时&#xff0c;此客户端首先检查是否有已运行的 …