Python列表,元组,集合,字典详解一篇搞懂
目录
介绍
列表(List)
集合(Set)
字典(Dict)
元组(Tuple)
列表
列表定义
编辑 列表切片
列表常用方法
append
extend
编辑 insert
编辑 remove
pop
编辑 clear
编辑 列表修改元素
sort
升序
倒序
reverse
count
编辑 index
浅拷贝和深拷贝
浅拷贝
深拷贝
两者区别
列表的加法和乘法
加法
乘法
列表推导式
元组
元组与列表的区别
举例
打包和解包
元组打包
元组解包
扩展解包
字典
定义
创建字典的六种方式
直接使用{}进行定义
dict定义
列表元组方式定义
不知道怎么描述的定义╮(╯▽╰)╭
混合定义
zip定义
formkeys增加字典键值对
pop删除字典元素
编辑 popitems 删除字典中最后一个键值对
del 删除键值
clear 清空字典
编辑get 获取键值元素
获取字典的视图对象
拿取字典键值长度和判断键值是否存在
字典推导式
集合
set 可变集合
创建集合
集合的基本操作
集合的去重示例
集合推导式
frozenset 不可变集合
创建 frozenset
特点
应用场景
示例
介绍
在Python中,列表(List)
、集合(Set)
、字典(Dict)
和元组(Tuple)
是四种基础且重要的数据结构,它们各有特点和适用场景:
列表(List)
优点:
- 有序性:列表中的元素按照插入的顺序排列,支持索引访问。
- 灵活性:可以动态添加、修改或删除元素,适合用于需要频繁变更的数据集合。
- 异构性:可以容纳不同类型的元素,如整数、字符串、对象等。
区别: 与其他三种相比,列表的主要区别在于其可变性和异构性,但这也使得它在某些情况下不如集合或字典高效。
集合(Set)
优点:
- 唯一性:自动去除重复元素,适合用于需要确保元素唯一性的场景。
- 高效查找:基于哈希表实现,提供了快速的成员测试和交、并、差等集合运算。
- 无序性:不保证元素的顺序,适合于对顺序不敏感的数据处理。
区别: 集合的独特之处在于其唯一性和无序性,适用于需要快速查找和处理无序数据集合的情况。
字典(Dict)
优点:
- 键值对:通过键(必须唯一)快速访问值,提供高效的映射关系存储。
- 灵活性:键可以是几乎任何不可变类型,支持动态添加、修改键值对。
- 无序性:虽然Python 3.7+中字典保持了插入顺序,但本质上字典是无序的。
区别: 字典的核心优势在于键值映射,适合构建复杂的数据结构,如缓存、配置等。
元组(Tuple)
优点:
- 不可变性:一旦创建,元素便不可更改,这有助于保护数据免受意外修改。
- 轻量级:相比于列表,元组在内存占用上更小,因为它是静态数据结构。
- 可作为字典键:由于其不可变性,元组可以直接作为字典的键使用。
区别: 元组的主要特征是不可变性和轻量级,适用于不需要修改的固定数据集合,如函数返回多个值的场景。
列表
列表定义
python的列表使用[] 进行数据定义,列表有序并且可以包含不同的数据类型
进行for循环打印元素
还可以使用列表推导式进行比较优雅的打印
列表索引是从0开始的
或者倒序取最后一个元素,倒序取最后一个元素是以-1,-2,-3这样进行排序
列表切片
python支持使用列表切片进行数据拿取
左侧闭区间,右侧是开区间
还可以进一步进行化简,从头开始那么头可以省略,到结尾结束,那么结尾也可以省略
还可以进行跨度取值 再添加一个冒号,冒号后设置跨度步长
前面是从开始到结尾那么开始到结尾也可以省略
还可以使用切片进行倒序输出
列表常用方法
append
添加一个元素到列表末尾
列表名.append(元素)
当然也可以使用切片来进行元素添加
注意 append方法每次只能添加一个元素 当我们想要一次性添加多个元素时可以使用extend方法
extend
一次性添加多个元素到列表末尾
列表名.extend(可迭代对象)
extend当然也可以使用切片优雅的实现
insert
在列表的任意位置插入数据
列表名.insert(插入的索引,元素)
remove
删除列表中第一个符合条件的元素
列表名.remove(元素)
注意
pop
删除指定下标元素
列表名.pop(下标索引)
clear
清空列表元素
列表名.clear()
列表修改元素
列表是可变的,可以进行任意元素的修改
列表名[下标索引] = 重新赋值元素
或者使用切片进行多个元素修改,左侧闭区间(包含)
sort
升序
列表数字元素默认升序排列
倒序
reverse
列表数字元素倒序排列
踩坑注意 reverse倒序必须在sort方法先升序排列后再调用倒序,不然会乱序:
count
返回列表中指定元素的数量
列表名.count(元素)
index
返回指定元素的索引
浅拷贝和深拷贝
在Python中,列表的浅拷贝和深拷贝是两种不同的复制列表数据结构的方式,它们在处理嵌套列表(即列表中包含其他列表)时表现出不同的行为。
浅拷贝
浅拷贝会创建原列表的一个副本,但是这个副本中的元素如果本身是可变对象(如子列表),那么这些元素不会被真正复制,新列表中的这些元素会引用原列表中相同对象的内存地址。换句话说,浅拷贝只拷贝一层,子对象仍然是引用。
然后我们更改lie的元素数据,查看lie2会有什么变化
说明lie2此时的拷贝是引用拷贝的浅拷贝
深拷贝
深拷贝则会递归地复制列表及其所有子对象,创建一个完全独立的新列表。这意味着修改原列表或其子列表不会影响到通过深拷贝得到的新列表。
两者区别
- 浅拷贝仅复制顶级元素,如果元素是可变对象(如列表、字典等),则拷贝的是这些对象的引用而非实际对象的内容。
- 深拷贝不仅复制顶级元素,还会递归地复制所有子元素,确保原列表和拷贝的列表在内存中是完全独立的,修改一个不会影响另一个。
根据实际需求选择合适的拷贝方式:如果列表中不包含或者不需要关心可变对象的独立性,浅拷贝可能更高效;反之,如果需要完全独立的复制品,应使用深拷贝。
列表的加法和乘法
加法
两个列表之间可以直接进行相加从而形成一个整体
乘法
列表的乘法是直接将列表中的元素进行乘法复制
列表推导式
列表在书写时可以使用列表推导式来替代原先的for循环写法,且执行速度比for循环更快,因为列表推导式是使用底层c语言来执行的
左侧是表达式,右侧是循环元素
循环右侧还可以进行筛选条件的书写
元组
Python的元组(Tuple)是一种不可变的序列类型,它与列表(List)相似,可以存储多个有序的数据项,但元组一旦创建后就不能修改其内容。元组通常用于存储一些固定的数据集合,比如日期、坐标点等,当不需要改变这些数据时,使用元组可以提供更好的性能和安全性。
元组与列表的区别
-
可变性:
- 列表是可变的,意味着你可以对列表进行增删改操作,如
append()
,extend()
,insert()
,remove()
等方法。 - 元组是不可变的,一旦创建,你不能更改或删除其中的元素。这使得元组更加安全,因为它们的值不会意外改变。
- 列表是可变的,意味着你可以对列表进行增删改操作,如
-
性能:
- 因为元组的不可变性,访问元组的速度通常比列表快,尤其是在大数据量的情况下,元组的处理更加高效。
-
语法:
- 列表用方括号
[]
表示,如[1, 2, 3]
。 - 元组用圆括号
()
表示,如(1, 2, 3)
。
- 列表用方括号
举例
元组的逗号非常重要,两边的括号可以省略
创建只有一个元素的元组
元组也可以使用列表推导式和切片
打包和解包
在Python中,元组的“打包”(packing)和“解包”(unpacking)是处理元组时的两个重要概念,它们帮助我们更灵活地操作数据。
元组打包
打包是指将多个值合并成一个元组的过程。实际上,当你直接列出一系列由逗号分隔的值,并用圆括号包围它们时,就已经在进行元组打包了。例如:
Python
1coordinates = (3, 4) # 这里,3和4被"打包"成一个元组
在这个例子中,数字3和4通过逗号连接并用圆括号包围,形成了一个包含两个元素的元组。
元组解包
解包则是将元组中的元素分配给单独的变量的过程。这可以通过将元组放在等号左侧,然后是一系列与元组元素数量相等的变量名来实现,每个变量接收元组中的一个元素。例如:
Python
1x, y = coordinates # 这里,元组"coordinates"被"解包"到变量x和y中
上面的代码中,coordinates
元组的两个元素分别被赋值给了变量x
和y
,这就是元组解包。
扩展解包
Python还支持一种称为“扩展解包”的操作,使用星号*
来收集多余的项为一个新的元组(或列表)。这对于处理不定长的参数列表特别有用。例如:
Python
a, b, c = (1, 2, 3) # 这里,a=1, b=2, c=3,
在这个例子中,a
接收第一个元素,b接受第二个
元素。 c
接收最后一个元素,
1a, *b, c = (1, 2, 3, 4, 5) # 这里,a=1, c=5, b=(2, 3, 4)
在这个例子中,a
接收第一个元素,c
接收最后一个元素,而b
作为一个新的元组接收剩余的所有元素。
注意 赋值号左边的变亮名数量和右侧序列的数量一定要一致,不然会报错
元组的打包和解包机制为Python编程提供了强大的灵活性,特别是在处理函数参数、返回值以及数据交换等方面。
字典
定义
Python的字典(Dictionary)是一种可变的、无序的、键-值对(key-value pair)的数据结构。字典中的每个元素都是一个键值对,其中键(key)是唯一的,不可变的(通常为字符串、数字或元组),用于快速查找对应的值(value),值可以是任何类型的对象。字典用花括号{}
表示,键值对之间用逗号,
分隔。
创建字典的六种方式
直接使用{}进行定义
dict定义
注意dict进行定义字典时,字典的key不要加引号
列表元组方式定义
不知道怎么描述的定义╮(╯▽╰)╭
感觉有点脱裤子放屁的味道
混合定义
zip定义
formkeys增加字典键值对
创建一个初始化键值的value都相同的字典
第一个参数传入可迭代对象,第二个参数传入value值,就可以初始化这个字典所有的键的value值都相同的字典
当想要修改字典的值时可以直接使用 下面的方式进行修改
或者初始化一个没有vaule的字典
pop删除字典元素
pop可以对字典值进行弹出删除
如果删除一个字典中本就不存在的键会报错
避免这样的错误可以传入第二个参数进行默认提示
popitems 删除字典中最后一个键值对
python3.7之前字典是无序的,popitems是随机删除一个字典的键值,在3.7之后是删除最后一个键值对
del 删除键值
或者可以使用del来对字典键值进行删除
clear 清空字典
使用clear方法对字典键值进行清空
get 获取键值元素
之前可以直接使用 字典名['键名'] 来获取value值,但是当键值不存在字典里面的时候就会报错
get可以获取键值元素,当字典中没有要获取的键值时,可以传入一个默认值来进行value的获取
可以看到获取的键值是不存在的但并没有报错,还可以传入一个默认值,当键值不存在的时候返回传入的默认值
获取字典的视图对象
当我们修改字典的键值value时观察视图对象的变化
拿取字典键值长度和判断键值是否存在
可以通过len函数来拿取字典的长度
使用in和not in来判断字典是否包含某个键
字典推导式
字典也可以使用字典推导式
使用字典推导式可以很方便地将key和value进行反转
或者加上筛选条件,当value值大于100时才进行反转
集合
set 可变集合
Python的集合(Set)是一种无序的、不重复的数据结构,用于存储不同类型的唯一元素,如整数、浮点数、字符串等。集合支持数学集合运算,如并集、交集、差集等。集合用花括号{}
或内置函数set()
来创建,但当使用花括号时,如果元素之间没有逗号分隔,会被解释为字典的键值对。
创建集合
-
使用花括号:
1my_set = {1, 2, 3} # 创建一个集合
-
使用set函数:
1my_set = set([1, 2, 3]) # 从列表转换成集合,自动去重
-
空集合:特别注意,空集合应该用
set()
而不是{}
,因为后者实际上创建的是一个空字典。1empty_set = set()
集合的基本操作
-
添加元素:使用
add()
方法。1my_set.add(4)
-
删除元素:使用
remove()
方法(如果元素不存在会抛出错误),或者discard()
方法(不会抛错)。1my_set.remove(7) # 如果7不存在,则抛出KeyError 2my_set.discard(7) # 如果7不存在,也不会报错
-
集合的并集:使用
union()
方法或|
操作符。1set1 = {1, 2, 3} 2set2 = {3, 4, 5} 3union_set = set1.union(set2) # 或者 set1 | set2
-
集合的交集:使用
intersection()
方法或&
操作符。1intersection_set = set1.intersection(set2) # 或者 set1 & set2
-
集合的差集:使用
difference()
方法或-
操作符。1difference_set = set1.difference(set2) # 或者 set1 - set2
-
集合的对称差集(不同时存在于两个集合的元素):使用
symmetric_difference()
方法或^
操作符。1symmetric_diff_set = set1.symmetric_difference(set2) # 或者 set1 ^ set2
集合的去重示例
集合的一个重要特性就是自动去重,因此,如果你想去除一个列表中的重复元素,转换为集合是一个非常简便的方法。
1my_list = [1, 2, 2, 3, 4, 4, 5]
2unique_set = set(my_list) # 转换为集合自动去重
3print(unique_set) # 输出集合,元素顺序可能与原列表不同
集合是Python中处理唯一元素集合时非常有用的数据结构,特别是涉及到集合运算和去重场景。
集合推导式
集合也可以直接使用推导式
frozenset 不可变集合
frozenset
是 Python 中的一个不可变集合类型,它是集合 set
的不可变版本。与普通集合相比,frozenset
的元素一旦创建后就不能被修改,这意味着你不能向其中添加或删除元素,也不能对集合进行更新。正因为它的不可变性,frozenset
可以作为字典的键或者作为其他集合的元素,这是普通集合做不到的。
创建 frozenset
1my_frozenset = frozenset([1, 2, 3])
2# 或者直接用花括号,但需确保元素间有逗号以区分
3my_frozenset = frozenset({1, 2, 3})
特点
- 不可变性:一旦创建,其内容就不能被改变。
- 哈希性:由于其不可变性,
frozenset
是可哈希的,这意味着它可以作为字典的键或作为其他集合的元素。 - 集合操作:虽然不能直接修改,但仍支持并集、交集、差集等集合运算。
应用场景
- 当你需要将一个集合用作字典的键或其他集合的成员时,使用
frozenset
是必要的。 - 在多线程环境中,使用
frozenset
可以避免因集合内容突变而引发的并发问题。 - 当集合的内容需要作为常量或者在算法中作为不变的部分时,使用
frozenset
更为合适。
示例
1# 创建 frozenset
2fs1 = frozenset([1, 2, 3])
3fs2 = frozenset([3, 4, 5])
4
5# 集合运算依然可行
6union_fs = fs1.union(fs2)
7intersection_fs = fs1.intersection(fs2)
8
9print("Union:", union_fs) # 输出: Union: frozenset({1, 2, 3, 4, 5})
10print("Intersection:", intersection_fs) # 输出: Intersection: frozenset({3})
11
12# 尝试修改 frozenset(会失败,因为它是不可变的)
13# fs1.add(4) # 这会引发 AttributeError,因为 'frozenset' object has no attribute 'add'
总之,frozenset
提供了一种安全的方式来表示不可更改的集合数据,适用于那些需要集合特性的场景但又要求数据不可变的情景。
相关文章:

Python列表,元组,集合,字典详解一篇搞懂
目录 介绍 列表(List) 集合(Set) 字典(Dict) 元组(Tuple) 列表 列表定义 编辑 列表切片 列表常用方法 append extend 编辑 insert 编辑 remove pop 编辑 clear 编辑 列表修改元素 sort 升序 倒序 reverse count 编辑 index 浅拷贝和深拷贝 …...

Postgresql源码(132)分布式行锁的原理分析
相关 《Postgresql源码(131)行锁的原理分析》 1 分布式行锁 PG中的行锁在上一片中做了分析《Postgresql源码(131)行锁的原理分析》,本篇对分布式PG(PGXL)中的行锁做一些分析。(版本…...

前端 防抖和节流
在前端开发中,防抖(Debounce)和节流(Throttle)是两种常用的性能优化技术,尤其在处理频繁触发的事件时显得尤为重要。无论是在用户输入、窗口调整大小,还是滚动事件中,这两种技术都可…...

C语言 | Leetcode C语言题解之第109题有序链表转换二叉搜索树
题目: 题解: int getLength(struct ListNode* head) {int ret 0;while (head ! NULL) {ret, head head->next;}return ret; }struct TreeNode* buildTree(struct ListNode** head, int left, int right) {if (left > right) {return NULL;}int …...
【DevOps】Linux 下安装配置 Apache 服务器:打造你的专属 Web 平台
目录 一、准备工作 二、安装 Apache 三、启动和管理 Apache 四、验证安装 五、配置 Apache 5.1 修改网站根目录 5.2 配置虚拟主机 5.2.1 创建虚拟主机配置文件 5.2.2 创建网站目录 5.2.3 启用虚拟主机 5.2.4 重启 Apache 5.3 配置 HTTPS 5.3.1 安装 SSL 证书 5.3…...

23种设计模式之一————外观模式详细介绍与讲解
外观模式详细讲解 一、概念二、 外观模式结构核心思想及解释模式的UML类图模式角色应用场景模式优点模式缺点 三、实例演示图示代码展示运行结果 一、概念 外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,…...
202109青少年软件编程(Python)等级考试试卷(四级)
第 1 题 【单选题】 执行如下 Python 代码后, 结果是?( ) def inverse(s,n=0): while s:n = n * 10 + s % 10s = s // 10return nprint...

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖
前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…...

【系统架构师】-论文考点整理
1、软件架构风格 1.1、概述 1、软件架构为软件系统提供了一个结构、行为和属性的高级抽象。 2、软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束。 1.2、作用 1、软件架构是项目干系人进行交流的手段。 2、软件架构是可传递和可复用的模型&…...

Android Activity 设计详解
文章目录 Android Activity 设计说明1. Activity 的生命周期2. Activity 的启动模式3. Activity 的通信4. Activity 的布局和视图管理5. Activity 的配置变化处理6. Activity 的保存和恢复状态7. Activity 的任务和返回栈 总结 Android Activity 设计说明 在 Android 中&#…...
国家开放大学,javaScript程序设计-形考任务-实训五:设计登录和注册页|实训六:设计简单的购物车
实训五:设计登录和注册页 1. 题目 设计登录和注册页。 2. 目的 (1)掌握表单域的引用方法。 (2)掌握常用控件的基本方法。 (3)掌握事件的处理方法。 (4)理解Cookie…...

微服务可用性之隔离
摘要 本文主要微服务场景下服务的可用性保障之隔离。隔离又分为几种情况,动静隔离、读写隔离、热点隔离、资源隔离等场景。 为什么要隔离 本质上是对资源进行分割确保在出现故障的时候服务只是部分不可用,不至于系统陷入整体性瘫痪,…...

设计模式——概述
1.设计模式定义 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性&#…...
#P0564. 数组元素查找升级版
问题描述 给你 n 个数,再给你一个数 k,查找 k 在这 n 个数中第一次出现的位置(从 0 开始计数),不存在输出 No。 输入 多组测试数据,对于每组测试数据: 第一行输入一个整数 n (1 ≤ n ≤ 100…...

如何修改WordPress网站的域名
我的网站用的是Hostease的虚拟主机,但是域名是之前在其他平台买的,而且已经快到期了,因为主机和域名在不同的平台上,管理不太方便,所以我又在Hostease重新注册了一个域名,然后把网站换成了新的域名…...
python爬虫[简易版]
python爬数据[简易版] 对于每个网站的爬的原理基本是一样的,但是具体的代码写法的区别就在于爬的数据中解析出想要的数据格式: 以爬取有道词典中的图片为例: 第一步:打开网站,分析图片的数据源来自哪里, https://dict-subsidiary.youdao.com/home/content?invalid&pre…...

128天的创意之旅:从初心到成就,我的博客创作纪念日回顾
文章目录 🚀机缘:初心的种子——回望创作之旅的启航🌈收获:成长的果实——128天创作之旅的宝贵馈赠❤️日常:创作与生活的交织👊成就:代码的艺术🚲憧憬:未来的蓝图 &…...

前端绘制流程节点数据
根据数据结构和节点的层级、子节点id,前端自己绘制节点位置和关联关系、指向、已完成节点等 <template><div><div>通过后端节点和层级,绘制出节点以及关联关系等</div><div class"container" ref"container&…...

2024年顶级算法-黑翅鸢优化算法(BKA)-详细原理(附matlab代码)
黑翅鸢是一种上半身蓝灰色,下半身白色的小型鸟类。它们的显著特征包括迁徙和捕食行为。它们以小型哺乳动物、爬行动物、鸟类和昆虫为食,具有很强的悬停能力,能够取得非凡的狩猎成功。受其狩猎技能和迁徙习惯的启发,该算法作者建立…...
Linux 内核开发 28 内核模块文件ko文件介绍
Linux 内核开发 28 内核模块文件ko文件介绍 1. ELF格式简介 内核模块文件ko文件,格式为elf格式, ELF(Executable and Linkable Format)可执行链接格式,是一种用于存储可执行程序、目标代码、共享库和内核模块的标准文件…...
瀚文机械键盘固件开发详解:HWKeyboard.cpp文件解析与应用
🔥 机械键盘固件开发从入门到精通:HWKeyboard模块全解析 作为一名嵌入式开发老司机,今天带大家拆解一个完整的机械键盘固件代码。即使你是单片机小白,看完这篇教程也能轻松理解机械键盘的工作原理,甚至自己动手复刻一…...

Vue部署到Nginx上及问题解决
一、Vue打包 dist文件即打包文件 二、下载Nginx,将dist内容全部复制到Nginx的html下 三、修改Nginx的nginx.conf配置文件,添加try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html; 是 Nginx 配置中的一个重要指令,用于处理…...
qt network 整体框架
以下是 Qt 网络模块中 QNetworkInterface、TCP、UDP 及相关类的层次关系图及说明: 一、Qt 网络模块层次结构 ┌─────────────────────────────────────────────────────────────┐ │ QtNetwork 模…...

【razor】x264 在 的intra-refresh和IDR插帧
你提到的是这样一个情况: 使用 DirectShow 采集,帧率稳定(如回调了20帧)使用 x264 的 total intra refresh 模式(intra-refresh=1) 进行编码但编码过程中「隔几十秒才有一帧intra(关键帧)」这不正常,具体分析如下: 🎯 一、问题核心 x264 的 intra refresh 模式(特…...

【八股消消乐】如何解决SQL线上死锁事故
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点ÿ…...

【bug】Error: /undefinedfilename in (/tmp/ocrmypdf.io.9xfn1e3b/origin.pdf)
在使用ocrmypdf的时候,需要Ghostscript9.55及以上的版本,但是ubuntu自带为9.50 然后使用ocrmypdf报错了 sudo apt update sudo apt install ghostscript gs --version 9.50 #版本不够安装的版本为9.50不够,因此去官网https://ghostscript.c…...

关于GitHub action云编译openwrt
特别声明:此教程仅你有成功离线编译的经验后,使用下列教程更佳 不建议没有任何成功经验的人进行云编译 1、准备工作 使用GitHub云编译模板 GitHub - jxjxcw/build_openwrt: 利用Actions在线云编译openwrt固件,适合官方源码,lede,lienol和immortalwrt源码,支持X86,电…...

如何思考?分析篇
现代人每天刷 100 条信息,却难静下心读 10 页书。 前言: 我一直把思考当作一件生活中和工作中最为重要的事情。但是我发现当我想写一篇跟思考有关的文章时,却难以下手。因为思考是一件非常复杂的事情,用文字描述十分的困难。 读书…...

腾讯开源视频生成工具 HunyuanVideo-Avatar,上传一张图+一段音频,就能让图中的人物、动物甚至虚拟角色“活”过来,开口说话、唱歌、演相声!
腾讯混元团队提出的 HunyuanVideo-Avatar 是一个基于多模态扩散变换器(MM-DiT)的模型,能够生成动态、情绪可控和多角色对话视频。支持仅 10GB VRAM 的单 GPU运行,支持多种下游任务和应用。例如生成会说话的虚拟形象视频࿰…...
Java项目中常用的中间件及其高频问题避坑
Java项目中常用的中间件及其高频问题避坑如下: 一、常用中间件分类及作用 1. 消息队列中间件 作用:解耦系统、异步通信、削峰填谷。代表产品: Kafka:高吞吐量流处理,适合日志收集、实时分析。RocketMQ:金融级可靠性,支持事务消…...