python元组集合&字典

元组

元组(tuple)是列表类型中比较特殊的类型,因为它一旦创建就不能被修改。(补充解释一哈:像int类型的,当它的值发生改变,则它id也会发生改变;但是list你改变它的内容,它的地址就不会变;元组不可变,如果直接改变元组的值就会报错)元组类型在表达固定数据项、函数多返回值、多变量同步赋值、循环遍历等情况下十分有用。Python中元组采用逗号和圆括号来表示。
若要查询元组操作符可输入dir(tuple)

1. 元组是序列类型的一种扩展
  • 元组是一种序列类型,一旦创建就不能被修改
  • 使用小括号()或tuple()创建,元素间用逗号,分隔
  • 可以使用或不使用小括号
2.元组继承序列类型的全部通用操作
  • 元组继承了序列类型的全部通用操作
  • 元组因为创建后不能修改,因此没有特殊操作
  • 使用或不使用小括号
3.元组的一些简单操作
  1. 创建
    逗号必须
a = 1,2,3
type(a)
#<class 'tuple'>
  1. 计数count()
count(a)
#3
  1. 索引index()
a.index(2)
#1
  1. 组合
a = 1,2,3
b = 4,5,6
c = a + b
c
#1,2,3,4,5,6
  1. 复制
    通过*来复制需要的次数
  2. 删除del
    删除整个元组,删除之后再访问则报错

集合

集合数据类型是没有顺序的简单对象的聚集,且集合元素不重复。Python集合数据类型包括可变集合对象(set)和不可变集合对象(frozenset)。集合中元素类型只能是固定数据类型,例如:整数、浮点数、字符串、元组等,列表、字典和集合类型本山都是可变数据类型,不能作为集合的元素出现。
大括号也可以创建集合,但是{}表示空的字典,因为字典也使用花括号定义。空集只能用set()

集合操作符

同样使用dir(set)

操作符描述
S_T或S.different(T)返回一个新集合,包括在集合S中但不在集合T中的元素
S_=T或S.different_update(T)更新集合S,包括在集合S中但不在集合T中的元素
S&T或S.intersection(T)返回一个新集合,包括同时在集合S和T中的元素
S&T或S.intersection_update(T)更新集合S,包括同时在其中的元素
S^T 或s.symmetric_difference(T)返回一个新集合,包括集合S和T中元素,但不包括同时在其中的元素
S^T 或s.symmetric_difference_update(T)更新集合S,包括集合S和T中元素,但不包括同时在其中的元素
SlT或S.union(T)返回一个新集合,包括集合S和T中所有元素
Sl=T或S.update(T)更新集合S,包括集合S和T中所有元素
S<=T或S.issubset(T)如果S与T相同或S是T的子集,返回True,否则返回False,可以用S<T判断S是否是T的真子集
S>=T或S.issuperset(T)如果S与T相同或S是T的超集,返回True,否则返回False,可以用S>T判断S是否是T的真超集
S.isdisjoint判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False

Tip:加update时指集合的地址不变,在原集合上操作,并不创建一个新的集合

添加add

用()将需要添加的多个元素装起来,如果需要添加的元素已经存在则不会发生改变,与update不同的是add将字符串作为一个整体放入集合中,而update会将字符串拆散

移除remove

将需要移除的元素写在括号里,如果要移除的元素表示集合中的元素,则会报错(KeyError)

抛弃discard

与remove基本一样,不同的是如果元素不在集合内不会报错

弹出pop

pop不能加入参数否则会报错,并且是随机弹出集合中的一个元素

复制copy

虽然是复制,但是不是指针指向同一个id,即两个的id值是不同的,也就是说如果一个改变,另一个是不会变的

清空clear

清空即为空集合,不是不存在了,而是空集

拼接union

将两个集合拼接并返回一个新集合,集合还有一个功能就是去重,即有重复值就会被覆盖

字典

字典(dict,或映射map)是一组键/值对的数据结构。每个键对应于一个值。在字典中,键是唯一的,值可以不唯一。根据键可以查询到值。对象的哈希值。字典的键只能使用不可变的对象,但字典的值可以使用不可变或可变的对象。字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号分割,整个字典包括在花括号 {} 中
映射类型是“键-值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。键值对是一种二元关系。在python中,映射类型主要以字典(dict)体现。
Tip:字典打印出来的顺序与创建之初的顺序不同,字典是集合类型的延续,各个元素没有顺序之分

理解“映射

映射是一种键(索引)和值(数据)的对应。字典是实现键值对映射的数据结构,请理解以下基本原则:

  1. 字典是一个键值对的集合,该集合以键为索引,一个键信息只对应一个值信息;
  2. 字典中元素以键信息为索引访问;
  3. 字典长度是可变的,可以通过对键信息复制实现增加或修改键值对。
字典类型是“映射”的体现

键值对:键是数据索引的扩展
字典是键值对的集合,键值对之间无序
采用大括号{}和dict()创建,键值对用冒号: 表示

映射的表达

映射无处不在,键值对无处不在
例如:统计数据出现的次数,数据是键,次数是值
最主要作用:表达键值对数据,进而操作它们

元素遍历

for k in d :
<语句块>
Tip:d[key]既可以索引,也可以赋值

创建

空字典的创建 a = dict()
非空字典的创建 b = dict(l=1, x=9)
通过二元组列表创建 dict = [(‘l’,1),(‘x’,9)]
通过dict和zip结合创建 dict(zip(‘lx’,[1,9]))
通过fromkeys()创建 dict.fromkeys(range(2),‘a’)
#{0:‘a’,1:‘a’}

查找与增加

字典最重要的用法是查找与特定键相对应的值,这通过索引符号来实现(中括号)
<值> = <字典变量>[<键>]
通过中括号也可以增加新的元素,直接使用大括号{}可以创建一个空的字典,并通过中括号[]向其增加元素

浅拷贝

浅拷贝就是只拷贝一层,拷贝最外面一层

键值操作
  • get(k[,d]):
    返回指定键的值,如果值不在字典中返回d值
  • D.keys():
    以列表返回一个字典所有的键
  • D.values():
    以列表返回一个字典所有的值
  • D.items():
    返回所有的键值对
  • D.setdefault(k[,d]):
    和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
  • D.popitem():
    随机从字典中取出一个键值对,以元组(key,value)形式返回
  • del D[key]:
    删除字典中某个键值对
更新

D.update([E, ]**F):
把另一个字典的键/值更新到原字典中

弹出

D.pop(k[,d]):
删除字典给定键 k 所对应的值,返回值为被删除的值。(k值必须给出)否则,返回d的值。

随机删除

D.popitem():
随机返回并删除字典中的一对键和值

清空

删除字典内所有元素

参考

参考1
参考2
参考3

&lt;think&gt;好的,用户想了解Python元组、列表、集合字典的区别与用法。首先我需要回忆这四种数据结构的基本特性,然后整理它们的区别和适用场景。 首先,元组和列表都是有序的,但元组不可变,列表可变。集合是无序且不重复的,字典是键值对的集合。这些是基本概念。接下来需要详细说明各自的特点,比如定义方式、操作方法和使用场景。 可能需要从可变性、存储结构、性能等方面展开比较。比如,列表适合频繁增删元素的场景,而元组适合不可变的数据,集合用于去重和成员检测,字典用于快速查找键对应的值。 还要注意它们的语法区别,比如元组用圆括号,列表用方括号,集合字典用花括号,但字典的每个元素是键值对。另外,集合中的元素必须是不可变类型,而字典的键也必须是不可变的。 在用法上,可以举一些例子,比如列表的append、元组的不可修改、集合的add和remove,字典的get方法等。性能方面,比如集合的查找速度比列表快,因为基于哈希表。 用户可能还想知道什么时候选择哪种数据结构,所以需要给出具体的应用场景,比如配置信息用元组,动态数据用列表,去重用集合,键值存储用字典。 最后,生成相关问题时,可以围绕它们的区别、转换方法、性能比较、使用注意点等方面提问。确保问题覆盖用户可能感兴趣的扩展内容。&lt;/think&gt;在Python中,元组、列表、集合字典是四种核心数据结构,其区别与用法如下: --- ### 一、基本特性对比 | 类型 | 可变性 | 有序性 | 元素唯一性 | 定义符号 | 典型场景 | |-------|--------|--------|------------|------------|--------------------| | 元组 | 不可变 | 有序 | 允许重复 | `()` | 存储固定配置、坐标 | | 列表 | 可变 | 有序 | 允许重复 | `[]` | 动态数据集合 | | 集合 | 可变 | 无序 | 禁止重复 | `{}`或`set()` | 去重、集合运算 | | 字典 | 可变 | 无序 | 键唯一 | `{key: value}` | 键值映射、快速查找 | --- ### 二、详细用法与示例 #### 1. **元组(Tuple)** - **定义**:`t = (1, &quot;a&quot;, 3.14)` - **特点**: - 不可修改元素,但可整体重新赋值 - 支持索引和切片操作 - 常用于函数多返回值,如:`return x, y` - **操作限制**: ```python t[0] = 2 # 报错:TypeError,不可修改元素 ``` #### 2. **列表(List)** - **定义**:`lst = [1, 2, 3]` - **核心操作**: ```python lst.append(4) # 增 &rarr; [1,2,3,4] lst.pop(0) # 删 &rarr; [2,3,4] lst[1] = &quot;b&quot; # 改 &rarr; [2,&quot;b&quot;,4] lst.extend([5,6]) # 合并 &rarr; [2,&quot;b&quot;,4,5,6] ``` #### 3. **集合(Set)** - **定义**:`s = {1, 2, 3}` 或 `s = set([1,1,2])`(去重后为`{1,2}`) - **集合运算**: ```python a = {1,2}; b = {2,3} a | b # 并集 &rarr; {1,2,3} a &amp; b # 交集 &rarr; {2} ``` #### 4. **字典(Dict)** - **定义**:`d = {&quot;name&quot;: &quot;Alice&quot;, &quot;age&quot;: 25}` - **核心操作**: ```python d[&quot;gender&quot;] = &quot;F&quot; # 增/改 del d[&quot;age&quot;] # 删 d.get(&quot;name&quot;, &quot;&quot;) # 安全获取,避免KeyError ``` --- ### 三、性能比较 | 操作 | 列表 | 集合 | 字典 | |---------------|-------|-------|-------| | 查找元素 | $O(n)$ | $O(1)$ | $O(1)$ | | 插入元素 | $O(1)$ | $O(1)$ | $O(1)$ | | 删除元素 | $O(n)$ | $O(1)$ | $O(1)$ | --- ### 四、使用场景 1. **元组**:保证数据不可变(如数据库查询结果) 2. **列表**:需要动态增删的数据序列(如日志记录) 3. **集合**:去重或数学集合运算(如用户标签过滤) 4. **字典**:键值关联查询(如缓存、配置管理) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值