首页 > 编程语言 >python篇:0基础带你入门python之元组集合字典

python篇:0基础带你入门python之元组集合字典

时间:2024-11-08 19:47:13浏览次数:3  
标签:python 元素 元组 person print 集合 字典

一、元组

Python 中的元组(`tuple`)是一种有序、不可变的集合数据类型。与列表(`list`)类似,元组用于存储多个元素,但一旦创建,它的内容不能修改。元组使用圆括号 `()` 来定义。

1. 元组的定义

元组可以通过圆括号 `()` 来定义,也可以省略括号,直接通过逗号分隔元素。

示例:

# 使用圆括号创建元组
tuple1 = (1, 2, 3, 4)
tuple2 = ('apple', 'banana', 'cherry')

# 不使用圆括号创建元组(逗号分隔)
tuple3 = 1, 2, 3, 4

# 创建空元组
empty_tuple = ()

# 创建包含一个元素的元组(必须加逗号)
single_element_tuple = (1,)

2. 元组的特点

  • - **有序**:元组中的元素按顺序排列,可以通过索引访问。
  • - **不可变**:一旦创建,元组的内容不能被修改、添加或删除。
  • - **支持重复元素**:元组允许包含重复元素。
  • - **支持多种数据类型**:元组可以包含不同类型的数据,如整数、浮点数、字符串等。

3. 访问元组中的元素

可以通过索引来访问元组中的元素,索引从 `0` 开始。

示例:

tuple1 = (10, 20, 30, 40)

# 访问第一个元素
print(tuple1[0])  # 输出 10

# 访问最后一个元素
print(tuple1[-1])  # 输出 40

4. 切片操作

与列表类似,元组也支持切片操作,可以获取元组中的部分元素。

示例:

tuple1 = (10, 20, 30, 40, 50)

# 获取索引从 1 到 3 的元素(不包含索引 4)
print(tuple1[1:4])  # 输出 (20, 30, 40)

# 获取从索引 2 到末尾的元素
print(tuple1[2:])   # 输出 (30, 40, 50)

# 获取从开头到索引 2 的元素(不包含索引 3)
print(tuple1[:3])   # 输出 (10, 20, 30)

5. 元组的不可变性

元组是不可变的,意味着元组中的元素不能被修改。如果尝试修改元组中的元素,Python 会引发 `TypeError`。

#### 示例:

tuple1 = (10, 20, 30)

# 尝试修改元素
# tuple1[1] = 25  # 会引发 TypeError: 'tuple' object does not support item assignment

6. 元组的嵌套

元组可以包含其他元组,甚至可以包含列表等其他数据结构。嵌套元组允许构建复杂的结构。

#### 示例:

tuple1 = (1, 2, (3, 4), [5, 6])
print(tuple1[2])  # 输出 (3, 4)
print(tuple1[2][1])  # 输出 4

7. 元组操作

虽然元组不可变,但仍然可以执行一些常见的操作,例如合并、重复等。

- **合并元组**:可以使用 `+` 运算符合并元组。

tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)

result = tuple1 + tuple2
print(result)  # 输出 (1, 2, 3, 4, 5, 6)
  • - **重复元组**:可以使用 `*` 运算符重复元组中的元素。
tuple1 = (1, 2, 3)

result = tuple1 * 3
print(result)  # 输出 (1, 2, 3, 1, 2, 3, 1, 2, 3)
``
  • - **成员检查**:可以使用 `in` 检查某个元素是否存在于元组中。
tuple1 = (10, 20, 30)

print(20 in tuple1)  # 输出 True
print(40 in tuple1)  # 输出 False
  • - **获取长度**:可以使用 `len()` 函数获取元组的元素个数。
tuple1 = (1, 2, 3, 4)
print(len(tuple1))  # 输出 4

如果元组的元素数量和变量数量不匹配,会引发 `ValueError`。

tuple1 = (1, 2, 3)
# a, b = tuple1  # 会引发 ValueError: too many values to unpack

9. 常用元组方法

尽管元组是不可变的,但它也提供了一些常用的方法来处理和查询数据。

- **`count()`**:返回指定元素在元组中出现的次数。

tuple1 = (1, 2, 2, 3, 2)
print(tuple1.count(2))  # 输出 3

- **`index()`**:返回指定元素第一次出现的索引。

tuple1 = (10, 20, 30, 40)
print(tuple1.index(30))  # 输出 2

二、集合 

Python 的集合(`set`)是一种无序且不包含重复元素的数据类型。集合数据类型非常适合用于去除重复元素、进行集合运算(如交集、并集、差集等),以及检查成员资格。

1. 集合的定义

集合使用花括号 `{}` 或 `set()` 函数来定义。集合中的元素是无序的,且集合中的元素必须是可哈希的(即是不可变的数据类型,如整数、字符串、元组等)。

示例:

# 使用花括号定义集合
s1 = {1, 2, 3, 4}

# 使用 set() 函数定义集合
s2 = set([1, 2, 3, 4])

# 空集合
empty_set = set()

# 集合元素必须是不可变类型(数字、字符串、元组)
# 错误示范:包含可变元素的集合
# s3 = {[1, 2], (3, 4)}  # 会引发 TypeError,因为列表是可变的

2. 集合的特点

  • - **无序**:集合中的元素没有顺序,因此无法通过索引、切片或其他序列操作访问元素。
  • - **不重复**:集合中不允许出现重复的元素。如果尝试添加重复元素,集合会自动去重。
  • - **可变**:集合是可变的,元素可以添加或删除。
  • - **元素必须是不可变类型**:集合的元素必须是可哈希的类型,例如整数、字符串、元组等,但不能包含可变对象(如列表、字典等)。

3. 集合的基本操作

3.1 添加元素

- **`add()`**:向集合中添加一个元素。如果元素已存在,集合不会添加。

s = {1, 2, 3}
s.add(4)  # 添加 4
print(s)  # 输出 {1, 2, 3, 4}

s.add(3)  # 尝试添加重复元素 3
print(s)  # 输出 {1, 2, 3, 4},3 不会重复添加

3.2 删除元素

  • - **`remove()`**:删除集合中的指定元素,如果元素不存在,会引发 `KeyError`。
  • - **`discard()`**:删除集合中的指定元素,如果元素不存在,不会引发错误。
  • - **`pop()`**:随机删除集合中的一个元素,并返回该元素。如果集合为空,调用 `pop()` 会引发 `KeyError`。
  • - **`clear()`**:清空集合中的所有元素。
s = {1, 2, 3, 4}

s.remove(3)  # 删除元素 3
print(s)  # 输出 {1, 2, 4}

s.discard(5)  # 尝试删除不存在的元素 5,不会报错
print(s)  # 输出 {1, 2, 4}

removed_element = s.pop()  # 删除并返回一个随机元素
print(removed_element)
print(s)  # 输出集合中剩余的元素

s.clear()  # 清空集合
print(s)  # 输出 set()

3.3 集合的长度和检查成员

  • - **`len()`**:返回集合中的元素个数。
  • - **`in`**:检查某个元素是否存在于集合中。
s = {1, 2, 3, 4}
print(len(s))  # 输出 4

print(2 in s)  # 输出 True
print(5 in s)  # 输出 False

4. 集合运算

集合支持多种数学运算,如并集、交集、差集等。Python 提供了直接的运算符来进行这些操作。

4.1 并集(Union)

- 使用 `|` 运算符或 `union()` 方法来求并集,返回一个包含两个集合所有元素的新集合。

s1 = {1, 2, 3}
s2 = {3, 4, 5}
union_set = s1 | s2  # 或者 s1.union(s2)
print(union_set)  # 输出 {1, 2, 3, 4, 5}

4.2 交集(Intersection)

- 使用 `&` 运算符或 `intersection()` 方法来求交集,返回一个包含两个集合共同元素的新集合。

s1 = {1, 2, 3}
s2 = {3, 4, 5}
intersection_set = s1 & s2  # 或者 s1.intersection(s2)
print(intersection_set)  # 输出 {3}

4.3 差集(Difference)

- 使用 `-` 运算符或 `difference()` 方法来求差集,返回一个包含在第一个集合中但不在第二个集合中的元素的新集合。

s1 = {1, 2, 3}
s2 = {3, 4, 5}
difference_set = s1 - s2  # 或者 s1.difference(s2)
print(difference_set)  # 输出 {1, 2}

4.4 异或集(Symmetric Difference)

- 使用 `^` 运算符或 `symmetric_difference()` 方法来求对称差集,返回一个包含两个集合中不重复的元素的新集合。

s1 = {1, 2, 3}
s2 = {3, 4, 5}
symmetric_difference_set = s1 ^ s2  # 或者 s1.symmetric_difference(s2)
print(symmetric_difference_set)  # 输出 {1, 2, 4, 5}

5. 集合的嵌套

集合可以嵌套其他集合,但需要注意集合元素必须是不可变的,因此集合本身不能作为集合的元素。

示例:

# 不能将集合作为元素放入另一个集合
# invalid_set = {{1, 2}, {3, 4}}  # 会引发 TypeError

6. 集合常用方法

- **`copy()`**:返回集合的一个浅拷贝。

  s = {1, 2, 3}
  copied_set = s.copy()
  print(copied_set)  # 输出 {1, 2, 3}

- **`isdisjoint()`**:判断两个集合是否没有交集。如果没有交集,返回 `True`,否则返回 `False`。

  s1 = {1, 2, 3}
  s2 = {4, 5, 6}
  print(s1.isdisjoint(s2))  # 输出 True

  s3 = {2, 3, 4}
  print(s1.isdisjoint(s3))  # 输出 False

- **`issubset()`**:判断一个集合是否是另一个集合的子集。即判断集合的所有元素是否都在另一个集合中。

  s1 = {1, 2, 3}
  s2 = {1, 2, 3, 4, 5}
  print(s1.issubset(s2))  # 输出 True

三、字典

Python 中的字典(`dict`)是一种无序、可变的键值对集合。每个字典由若干个键(key)和值(value)组成,其中键是唯一的,值可以是任何类型的数据。字典通常用于快速查找和存储关联数据。

1. 字典的定义

字典使用花括号 `{}` 或 `dict()` 函数来定义,键和值之间用冒号 `:` 分隔,多个键值对用逗号 `,` 分隔。

示例:

# 使用花括号定义字典
person = {'name': '张三', 'age': 18, 'sex': '男'}

# 使用 dict() 函数定义字典
person2 = dict(name='李四', age=20, sex='女')

# 空字典
empty_dict = {}

# 使用键值对创建字典
dict_from_pairs = dict([('a', 1), ('b', 2)])

# 使用字典推导式创建字典
squared_numbers = {x: x ** 2 for x in range(5)}
print(squared_numbers)  # 输出 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

2. 字典的特点

  • - **无序**:字典中的元素是无序的,Python 3.7 及之前的版本,字典中的元素的顺序是随机的,但从 Python 3.7 起,字典保持插入顺序。
  • - **可变**:字典是可变类型,可以动态添加、修改或删除键值对。
  • - **键唯一**:字典中的键必须是唯一的,如果插入相同的键,后插入的值会覆盖先插入的值。
  • - **键必须是不可变类型**:字典的键必须是不可变类型(如字符串、整数、元组等),而值可以是任意数据类型。
  • - **查找效率高**:字典提供了通过键进行快速查找的能力,查找操作的时间复杂度为 O(1)。

3. 字典的基本操作

3.1 访问字典中的值

可以通过键来访问字典中的值。如果键不存在,访问时会抛出 `KeyError`,但可以使用 `get()` 方法避免抛出错误。

person = {'name': '张三', 'age': 18, 'sex': '男'}

# 通过键访问值
print(person['name'])  # 输出 张三

# 使用 get() 方法访问值
print(person.get('age'))  # 输出 18

# 如果键不存在,get() 返回 None
print(person.get('address'))  # 输出 None

# 使用 get() 方法指定默认值
print(person.get('address', '未知'))  # 输出 未知

3.2 添加或修改字典的键值对

可以直接通过键来添加或修改字典中的元素。如果键已经存在,新的值将覆盖旧的值。

person = {'name': '张三', 'age': 18}

# 添加新的键值对
person['sex'] = '男'

# 修改已存在的键值对
person['age'] = 20

print(person)  # 输出 {'name': '张三', 'age': 20, 'sex': '男'}

3.3 删除字典中的元素

  • - **`del`**:根据键删除字典中的元素。
  • - **`pop()`**:删除指定的键值对,并返回被删除的值。如果键不存在,`pop()` 方法会抛出 `KeyError`,但可以使用 `pop()` 的第二个参数来指定默认值。
  • - **`popitem()`**:删除字典中的一个键值对,并返回删除的键值对。该方法删除的是字典中的“最后一个”键值对(Python 3.7 之后按照插入顺序删除)。
  • - **`clear()`**:清空字典中的所有元素。
person = {'name': '张三', 'age': 18, 'sex': '男'}

# 使用 del 删除元素
del person['age']
print(person)  # 输出 {'name': '张三', 'sex': '男'}

# 使用 pop() 删除并返回指定键值对
age = person.pop('age', '未提供')  # 如果键不存在,返回默认值
print(age)  # 输出 未提供
print(person)  # 输出 {'name': '张三', 'sex': '男'}

# 使用 popitem() 删除并返回字典中的最后一个键值对
last_item = person.popitem()
print(last_item)  # 输出 ('sex', '男')
print(person)  # 输出 {'name': '张三'}

# 使用 clear() 清空字典
person.clear()
print(person)  # 输出 {}

3.4 字典的长度与检查键是否存在

  • - **`len()`**:返回字典中键值对的数量。
  • - **`in`**:检查某个键是否存在于字典中。
person = {'name': '张三', 'age': 18}

# 获取字典中键值对的数量
print(len(person))  # 输出 2

# 检查某个键是否存在于字典中
print('name' in person)  # 输出 True
print('address' in person)  # 输出 False

4. 字典的遍历

可以使用 `for` 循环遍历字典中的键、值或键值对。

4.1 遍历字典的键

person = {'name': '张三', 'age': 18, 'sex': '男'}

for key in person:
    print(key)

4.2 遍历字典的值

for value in person.values():
    print(value)

4.3 遍历字典的键值对

for key, value in person.items():
    print(key, value)

5. 字典的常用方法

  • - **`keys()`**:返回字典中所有的键。
  • - **`values()`**:返回字典中所有的值。
  • - **`items()`**:返回字典中所有的键值对。
  • - **`update()`**:将一个字典的键值对更新到另一个字典中。如果有相同的键,后面的值会覆盖前面的值。
  • - **`copy()`**:返回字典的浅拷贝。
  • - **`fromkeys()`**:创建一个新的字典,键来自于给定的序列,值为指定的默认值。
person = {'name': '张三', 'age': 18}

# 获取所有的键
print(person.keys())  # 输出 dict_keys(['name', 'age'])

# 获取所有的值
print(person.values())  # 输出 dict_values(['张三', 18])

# 获取所有的键值对
print(person.items())  # 输出 dict_items([('name', '张三'), ('age', 18)])

# 使用 update() 更新字典
person.update({'sex': '男', 'age': 20})
print(person)  # 输出 {'name': '张三', 'age': 20, 'sex': '男'}

# 使用 copy() 创建字典的浅拷贝
person_copy = person.copy()
print(person_copy)  # 输出 {'name': '张三', 'age': 20, 'sex': '男'}

# 使用 fromkeys() 创建字典
new_dict = dict.fromkeys(['a', 'b', 'c'], 0)
print(new_dict)  # 输出 {'a': 0, 'b': 0, 'c': 0}

标签:python,元素,元组,person,print,集合,字典
From: https://blog.csdn.net/qq_63627943/article/details/143607302

相关文章

  • python篇:0基础带你入门python之函数篇
    所谓函数就是将一批代码进行打包封装,便于之后使用比如defmy_fun():print("我爱你")my_fun()这样在任何地方使用my_fun()即可马上输出“我爱你”,一、初入函数 不仅如此,函数分为有参函数和无参函数,有返回函数和无返回函数,总共四个有参有返回函数有参无返回函数无......
  • python+flask计算机毕业设计共享充电柜系统WEB管理平台的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景随着电动交通工具的普及,充电需求日益增长,共享充电柜作为一种新兴的充电解决方案应运而生。关于共享充电设施的研究,现有研究主要以共享......
  • python+flask计算机毕业设计隔离点管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于隔离点管理的研究,现有研究主要以宏观的防疫策略和部分管理环节为主,专门针对隔离点全面管理系统的研究较少。在国内外疫情防控期间......
  • _python之字符类型
    一、索引索引在公司中一般也叫下标,或角标定义:可我们可以直接使用索引来访问序列中的元素,同时索引可分为正向索引和负向索引两种,而切片也会用到索引,如下图:二、切片定义:切片是指对操作的对象截取其中一部分的操作,字符串,列表,元组都支持切片操作切片的语法:【开始索引:结束索引:步......
  • 基于Python的在线自主考试系统开发与设计
    目录摘要IIAbstractIII1系统概述11.1研究背景11.2研究现状21.3研究的意义21.4Python技术21.5MySQL数据库32需求分析42.1可行性分析42.1.1技术可行性42.1.2经济可行性42.1.3操作可行性42.1.4发展可行性52.2系统流程分析52.2.1......
  • python 2.x 模拟桩
    用python(2.*)写一个简单的模拟桩并且打印出请求头和消息体,便于调试接口,看看请求头和body是否符合要求vimockServer.pyfromBaseHTTPServerimportBaseHTTPRequestHandler,HTTPServerclassSimpleHTTPRequestHandler(BaseHTTPRequestHandler):defdo_GET(self):......
  • Python中%的用法
    一、运算符在算术运算环境中,作为取余的运算符使用。A%B:返回A除以B的余数。print(7%3)#输出结果为1二、占位符1、%%C语言中%%表示转义生成字符%Python中当有类似%d、%f、%s等格式转换符时,如果需要在后面添加百分号,就需要在格式转换符后加双百分号%%。print('%%')#输出......
  • Python中find()的用法
    Python中find()函数是字符串对象的方法,只能在字符串上调用,用于检测查询字符串中的目标字符(串),并返回索引。有目标字符(串),则返回目标字符(串)第一次出现的索引(字符串中字符索引从左到右,从0开始计算);无目标字符(串),则返回-1。语法:str.find(string,start,end)str:待查询的字符串。stri......
  • 使用 Python 流式 Websocket 传输 Binance 订单更新 附代码
    对于从事加密货币行业的任何人来说,使用RESTapi从交易所查询实时数据并不总是最佳做法,原因有很多效率低下:每个查询都需要时间,并且会显着影响性能,尤其是对于高频策略。交易所施加的限制很容易被打破,例如Binance的硬限制为每分钟1200个请求权重您只能检索有限数量的历史数......
  • Python之字符类型
    一、索引索引在公司中一般也叫下标,或角标定义:可我们可以直接使用索引来访问序列中的元素,同时索引可分为正向索引和负向索引两种,而切片也会用到索引,如下图:Python中有序列:字符,列表,元组无序:集合正向索引:从0开始负向索引:-1开始二、切片定义:切片是指对操作的对象截取其中一部......