【第三章】Python 数据类型及操作详解

部署运行你感兴趣的模型镜像

Python 数据类型及操作详解



前言

在 Python 编程中,数据类型是处理数据的基础。Python 提供了丰富的内置数据类型,每种类型都有其独特的特性和适用场景。理解这些数据类型及其操作,是写出高效、简洁代码的关键。本文将详细介绍 Python 中常见的数据类型,并通过实例讲解它们的核心操作。


一、Python 数据类型的分类

Python 的数据类型可分为基本数据类型复合数据类型

  • 基本数据类型:直接存储单一值,如整数、浮点数、字符串、布尔值等。
  • 复合数据类型:由多个元素组成,可存储一组值,如列表、元组、字典、集合等。

此外,根据值是否可修改,数据类型还可分为不可变类型(值创建后无法修改)和可变类型(值可动态修改):

  • 不可变类型:整数、浮点数、字符串、元组等。
  • 可变类型:列表、字典、集合等。

二、基本数据类型及操作

2.1 整数(int)

整数是没有小数部分的数字,Python 中整数支持任意大小(不受位数限制),可正可负。

基本操作

  • 算术运算:+(加)、-(减)、*(乘)、/(除,结果为浮点数)、//(整除,向下取整)、%(取余)、**(幂运算)。
  • 比较运算:==(等于)、!=(不等于)、>(大于)、<(小于)等。
  • 其他操作:abs(x)(取绝对值)、int(x)(类型转换)等。

举例:

运行
# 整数定义
a = 10
b = -5
c = 1000000000000000000000000  # 大整数,Python无大小限制

# 算术运算
print(a + b)  # 输出:5
print(a * 3)  # 输出:30
print(a / 3)  # 输出:3.3333333333333335(除法结果为浮点数)
print(a // 3)  # 输出:3(整除)
print(a % 3)   # 输出:1(取余)
print(2 **3)  # 输出:8(2的3次方)

# 类型转换
print(int("123"))  # 输出:123(字符串转整数)
print(int(3.9))    # 输出:3(浮点数转整数,截断小数部分)

2.2 浮点数(float)

浮点数是带小数部分的数字,也可表示科学计数法(如1.2e3表示 1200)。

基本操作

  • 与整数类似,支持算术运算和比较运算,但需注意浮点数的精度问题(由于二进制存储特性,可能存在微小误差)。
  • 常用函数:float(x)(类型转换)、round(x, n)(四舍五入,保留 n 位小数)等。

举例:

运行
# 浮点数定义
x = 3.14
y = -0.5
z = 1.2e3  # 等价于1200.0

# 运算
print(x + y)  # 输出:2.64
print(x * 2)  # 输出:6.28

# 精度问题
print(0.1 + 0.2)  # 输出:0.30000000000000004(而非0.3)

# 四舍五入
print(round(x, 1))  # 输出:3.1(保留1位小数)

# 类型转换
print(float("3.14"))  # 输出:3.14(字符串转浮点数)
print(float(5))       # 输出:5.0(整数转浮点数)

2.3 字符串(str)

字符串是由字符组成的序列,用单引号(‘)、双引号(")或三引号(’‘’/“”")包裹。三引号可用于定义多行字符串。

核心特性

  • 不可变:字符串创建后,不能修改单个字符(修改会生成新字符串)。
  • 支持索引([])和切片([:]):通过位置访问字符或子串。

常用操作

操作类型示例代码说明
拼接“Hello” + " World"合并两个字符串,结果为"Hello World"
重复“a” * 3重复字符串,结果为"aaa"
索引“Python”[0]获取索引 0 的字符,结果为"P"
切片“Python”[1:4]获取索引 1 到 3 的子串,结果为"yth"
长度len(“Python”)返回字符串长度,结果为 6
查找“Python”.find(“tho”)查找子串位置,结果为 2
替换“Hello”.replace(“H”, “h”)替换子串,结果为"hello"
分割“a,b,c”.split(“,”)按分隔符分割,结果为[“a”, “b”, “c”]
大小写转换“Hello”.lower()转为小写,结果为"hello"

举例:

运行
# 字符串定义
s1 = 'hello'
s2 = "world"
s3 = '''多行
字符串'''  # 包含换行符

# 拼接与重复
print(s1 + " " + s2)  # 输出:hello world
print(s1 * 2)         # 输出:hellohello

# 索引与切片(索引从0开始,负数表示从末尾计数)
print(s1[0])      # 输出:h
print(s1[-1])     # 输出:o(最后一个字符)
print(s1[1:4])    # 输出:ell(索引1到3的字符)
print(s1[:3])     # 输出:hel(从开头到索引2)
print(s1[2:])     # 输出:llo(从索引2到末尾)

# 常用方法
print(s1.upper())        # 输出:HELLO(转大写)
print("  test  ".strip())# 输出:test(去除首尾空格)
print("apple".count("p"))# 输出:2(统计子串出现次数)

2.4 布尔值(bool)

布尔值用于表示真(True)或假(False),主要用于条件判断。

基本操作

  • 逻辑运算:and(与)、or(或)、not(非)。
  • 任何值都可通过bool(x)转换为布尔值:空值(如""、0、None、[])转换为False,非空值转换为True。

举例:

运行
# 布尔值定义
a = True
b = False

# 逻辑运算
print(a and b)  # 输出:False(与运算,两者都为True才返回True)
print(a or b)   # 输出:True(或运算,至少一个为True则返回True)
print(not a)    # 输出:False(非运算,取反)

# 类型转换
print(bool(0))      # 输出:False(0为假)
print(bool(1))      # 输出:True(非0数字为真)
print(bool(""))     # 输出:False(空字符串为假)
print(bool("abc"))  # 输出:True(非空字符串为真)
print(bool([]))     # 输出:False(空列表为假)

三、复合数据类型及操作

3.1 列表(list)

列表是有序、可变的元素集合,用方括号([])定义,元素之间用逗号分隔。列表可包含任意类型的元素,且元素可重复。

核心特性

  • 有序:元素有明确的位置,可通过索引访问。
  • 可变:可添加、删除、修改元素(不创建新列表)。
  • 支持嵌套:列表中的元素可以是另一个列表。

常用操作

操作类型示例代码说明
创建[1, 2, 3] 或 list(range(3))定义列表或通过其他序列转换
索引/ 切片lst[0]、lst[1:3]访问单个元素或子列表
添加元素lst.append(4)在末尾添加元素
插入元素lst.insert(1, 5)在索引 1 处插入元素 5
删除元素lst.remove(2) 或 del lst[0]移除指定值的元素或指定索引的元素
排序lst.sort()对列表元素排序(原地修改)
反转lst.reverse()反转列表元素(原地修改)

举例:

运行
# 列表创建
lst = [1, "hello", True, 3.14]  # 包含多种类型元素
empty_lst = []                  # 空列表
nested_lst = [1, [2, 3], 4]     # 嵌套列表

# 索引与切片
print(lst[1])       # 输出:hello(访问索引1的元素)
print(lst[1:3])     # 输出:['hello', True](获取索引1到2的子列表)
print(nested_lst[1][0])  # 输出:2(访问嵌套列表的元素)

# 修改元素
lst[0] = 100
print(lst)  # 输出:[100, 'hello', True, 3.14]

# 添加元素
lst.append(5)
print(lst)  # 输出:[100, 'hello', True, 3.14, 5]
lst.insert(2, "new")
print(lst)  # 输出:[100, 'hello', 'new', True, 3.14, 5]

# 删除元素
lst.remove("hello")  # 移除值为"hello"的元素
print(lst)  # 输出:[100, 'new', True, 3.14, 5]
del lst[0]  # 删除索引0的元素
print(lst)  # 输出:['new', True, 3.14, 5]

# 排序(元素类型需一致,否则会报错)
num_lst = [3, 1, 4, 2]
num_lst.sort()
print(num_lst)  # 输出:[1, 2, 3, 4]

3.2 元组(tuple)

元组是有序、不可变的元素集合,用圆括号(())定义(元素较少时可省略括号)。元组的特性与列表类似,但元素一旦创建就无法修改。

核心特性

  • 不可变:不能添加、删除或修改元素(修改会报错)。
  • 有序:支持索引和切片,与列表用法一致。
  • 适合存储固定数据:如坐标(x, y)、日期(年,月,日)等。

常用操作

元组的操作与列表类似,但缺少修改元素的方法(如append、insert),主要操作包括索引、切片、拼接、重复等。

举例:

运行
# 元组创建
tpl = (1, "hello", 3.14)
single_tpl = (5,)  # 单个元素的元组需加逗号,否则会被视为普通值
empty_tpl = ()     # 空元组

# 索引与切片
print(tpl[1])     # 输出:hello
print(tpl[1:3])   # 输出:('hello', 3.14)

# 拼接与重复
tpl2 = (4, 5)
print(tpl + tpl2)  # 输出:(1, 'hello', 3.14, 4, 5)
print(tpl2 * 2)    # 输出:(4, 5, 4, 5)

# 不可变性(修改会报错)
# tpl[0] = 100  # 执行会报错:'tuple' object does not support item assignment

3.3 字典(dict)

字典是无序(Python 3.7 + 开始有序)的键值对集合,用花括号({})定义,键与值之间用冒号(:)分隔,键值对之间用逗号分隔。字典通过键(key)访问值(value),键必须唯一且不可变(如整数、字符串、元组),值可以是任意类型。

核心特性

  • 键值对映射:通过键快速查找值(时间复杂度为 O (1))。
  • 可变:可添加、删除、修改键值对。

常用操作

操作类型示例代码说明
创建{“name”: “Alice”, “age”: 30}定义字典
访问值dict[“name”] 或 dict.get(“name”)通过键访问值,get方法在键不存在时返回默认值
添加 / 修改键值对dict[“gender”] = “female”键不存在则添加,存在则修改
删除键值对del dict[“age”] 或 dict.pop(“age”)删除指定键的键值对,pop返回对应值
获取键 / 值dict.keys()、dict.values()返回所有键、所有值的视图
检查键是否存在“name” in dict存在返回True,否则返回False

举例:

运行
# 字典创建
person = {
    "name": "Alice",
    "age": 30,
    "hobbies": ["reading", "music"]
}
empty_dict = {}  # 空字典

# 访问值
print(person["name"])       # 输出:Alice
print(person.get("age"))    # 输出:30
print(person.get("gender", "unknown"))  # 输出:unknown(键不存在时返回默认值)

# 添加/修改键值对
person["gender"] = "female"  # 添加新键值对
person["age"] = 31           # 修改已有键的值
print(person)  # 输出:{'name': 'Alice', 'age': 31, 'hobbies': ['reading', 'music'], 'gender': 'female'}

# 删除键值对
del person["gender"]
print(person)  # 输出:{'name': 'Alice', 'age': 31, 'hobbies': ['reading', 'music']}
age = person.pop("age")
print(age)     # 输出:31(返回删除的值)

# 遍历字典
for key in person.keys():
    print(key)  # 输出:name、hobbies
for value in person.values():
    print(value)  # 输出:Alice、['reading', 'music']
for key, value in person.items():
    print(f"{key}: {value}")  # 输出键值对

3.4 集合(set)

集合是无序、不重复的元素集合,用花括号({})或set()函数定义(空集合必须用set(),因为{}表示空字典)。

核心特性

  • 去重:自动移除重复元素。
  • 无序:不支持索引和切片,不能通过位置访问元素。
  • 支持集合运算:如交集、并集、差集等。

常用操作

操作类型示例代码说明
创建{1, 2, 3} 或 set([1, 2, 3])定义集合或通过其他序列转换
添加元素s.add(4)添加单个元素
删除元素s.remove(2) 或 s.discard(2)删除元素,remove在元素不存在时报错,discard不报错
交集s1 & s2 或 s1.intersection(s2)两个集合的共同元素
并集s1 | s2或s1.union(s2)两个集合的所有元素(去重)
差集s1 - s2 或 s1.difference(s2)属于 s1 但不属于 s2 的元素

举例:

运行
# 集合创建(自动去重)
s = {1, 2, 2, 3}
print(s)  # 输出:{1, 2, 3}
empty_set = set()  # 空集合

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

# 集合运算
s1 = {1, 2, 3}
s2 = {3, 4, 5}

# 交集(共同元素)
print(s1 & s2)  # 输出:{3}

# 并集(所有元素)
print(s1 | s2)  # 输出:{1, 2, 3, 4, 5}

# 差集(s1有而s2没有的元素)
print(s1 - s2)  # 输出:{1, 2}

四、数据类型转换

Python 中可通过内置函数实现不同数据类型之间的转换,常见转换函数如下:

函数说明示例
int(x)转换为整数int(“123”) → 123
float(x)转换为浮点数float(“3.14”) → 3.14
str(x)转换为字符串str(123) → “123”
list(x)转换为列表list(“abc”) → [“a”, “b”, “c”]
tuple(x)转换为元组tuple([1, 2]) → (1, 2)
set(x)转换为集合(去重)set([1, 2, 2]) → {1, 2}
dict(x)转换为字典(x 需为键值对序列) dict([(“a”, 1), (“b”, 2)]) → {“a”:1, “b”:2}

举例:

运行
# 字符串转列表
s = "hello"
print(list(s))  # 输出:['h', 'e', 'l', 'l', 'o']

# 列表转集合(去重)
lst = [1, 2, 2, 3]
print(set(lst))  # 输出:{1, 2, 3}

# 元组转字典
tpl_list = [("name", "Bob"), ("age", 25)]
print(dict(tpl_list))  # 输出:{'name': 'Bob', 'age': 25}

总结

Python 的数据类型丰富且灵活,不同类型适用于不同场景:

  • 整数和浮点数用于数值计算;
  • 字符串用于处理文本;
  • 布尔值用于条件判断;
  • 列表适合存储有序、可变的元素集合;
  • 元组适合存储固定不变的数据;
  • 字典通过键值对实现高效的映射关系;
  • 集合用于去重和集合运算。

掌握这些数据类型的特性和操作,能帮助我们更高效地处理数据,写出更符合 Python 风格的代码。在实际编程中,应根据需求选择合适的数据类型,例如需要去重时用集合,需要快速查找时用字典,需要修改元素时用列表等。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值