Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”

一、引言:为什么数据类型如此重要?

在 Python 编程中,数据类型决定了:

  • 数据的存储方式
  • 可以对数据执行的操作
  • 数据的取值范围
  • 不同类型之间的运算规则

理解数据类型是编写正确、高效程序的基础。Python 是动态类型语言,虽然你不需要显式声明类型,但必须清楚每个变量的类型及其行为。


二、Python 内置核心数据类型概览

Python 提供了丰富的内置数据类型,主要分为以下几类:

|-----------|----------------------------------|----------|
| 类别 | 数据类型 | 说明 |
| 数字类型 | int, float, complex | 数值计算 |
| 文本类型 | str | 字符串处理 |
| 布尔类型 | bool | 逻辑判断 |
| 序列类型 | list, tuple, range | 有序数据集合 |
| 映射类型 | dict | 键值对存储 |
| 集合类型 | set, frozenset | 无序唯一元素集合 |
| 二进制类型 | bytes,bytearray,memoryview | 二进制数据处理 |

💡 本文将重点讲解最常用的核心类型。


三、数字类型(Numeric Types)

1. 整数(int)

表示整数值,没有大小限制(仅受内存限制)。

复制代码
age = 25
temperature = -10
big_number = 123456789012345678901234567890
常用操作:
复制代码
a = 10
b = 3

print(a + b)   # 13  加法
print(a - b)   # 7   减法
print(a * b)   # 30  乘法
print(a / b)   # 3.333...  除法(结果为 float)
print(a // b)  # 3   整除
print(a % b)   # 1   取余
print(a ** b)  # 1000  幂运算

⚠️ 注意:/ 运算符总是返回浮点数 ,即使结果是整数(如 4 / 2 返回 2.0)。


2. 浮点数(float)

表示带小数点的数字,遵循 IEEE 754 标准。

复制代码
price = 19.99
pi = 3.1415926535
scientific = 1.5e-4  # 科学计数法,等于 0.00015
浮点数精度问题:
复制代码
print(0.1 + 0.2)  # 输出:0.30000000000000004
print(0.1 + 0.2 == 0.3)  # False!

解决方案 :使用 decimal 模块进行高精度计算(如金融计算):

复制代码
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3'))  # True

3. 复数(complex)(了解即可)

用于数学和工程计算,形式为 a + bj

复制代码
z = 3 + 4j
print(z.real)  # 3.0
print(z.imag)  # 4.0

四、文本类型:字符串(str)

字符串是字符的序列,用单引号、双引号或三引号包围。

复制代码
name = "Alice"
message = 'Hello, World!'
multi_line = """这是一个
多行字符串"""

字符串的常用操作

1. 字符串拼接
复制代码
first = "Hello"
last = "World"
full = first + " " + last  # "Hello World"

✅ 推荐使用 f-string(Python 3.6+):

复制代码
name = "Alice"
age = 25
print(f"我是{name},今年{age}岁。")
2. 字符串索引与切片
复制代码
text = "Python"

print(text[0])    # 'P'  第一个字符
print(text[-1])   # 'n'  最后一个字符
print(text[1:4])  # 'yth'  切片 [start:end)
print(text[:3])   # 'Pyt'  从开头到索引3(不含)
print(text[3:])   # 'hon'  从索引3到结尾
3. 常用字符串方法

|----------------------|-----------|------------------------------------------|
| 方法 | 说明 | 示例 |
| .upper() | 转大写 | "hello".upper()"HELLO" |
| .lower() | 转小写 | "HELLO".lower()"hello" |
| .strip() | 去除首尾空白 | " abc ".strip()"abc" |
| .replace(old, new) | 替换 | "abc".replace("a", "x")"xbc" |
| .split(sep) | 分割 | "a,b,c".split(",")['a', 'b', 'c'] |
| .join(list) | 连接 | "-".join(['a','b','c'])"a-b-c" |
| .find(sub) | 查找位置 | "abc".find("b")1 |
| .startswith() | 是否以某字符串开头 | "abc".startswith("a")True |

复制代码
email = "  Alice@EXAMPLE.COM  "
clean_email = email.strip().lower()
print(clean_email)  # "alice@example.com"

五、布尔类型(bool)

布尔值只有两个:TrueFalse,用于逻辑判断。

复制代码
is_student = True
has_permission = False

布尔值的来源:

  • 比较运算的结果

  • 条件判断的结果

  • 任何对象都可以被"真值测试"

    print(5 > 3) # True
    print(10 == 10) # True
    print("hello" != "") # True

    真值测试(Truthiness)

    print(bool(1)) # True
    print(bool(0)) # False
    print(bool("abc")) # True
    print(bool("")) # False
    print(bool([1, 2])) # True
    print(bool([])) # False

规则 :空值(0, "", [], {}, None)为 False,其他为 True


六、序列类型

1. 列表(list)------ 有序、可变

列表是最常用的数据结构,可以存储不同类型的数据。

复制代码
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = ["Alice", 25, True, 3.14]
列表的常用操作:
复制代码
# 访问元素
print(fruits[0])     # "苹果"
print(fruits[-1])    # "橙子"

# 修改元素
fruits[1] = "葡萄"

# 添加元素
fruits.append("草莓")      # 末尾添加
fruits.insert(1, "芒果")   # 在索引1处插入

# 删除元素
fruits.remove("苹果")      # 删除指定值
del fruits[0]             # 删除索引0的元素
popped = fruits.pop()     # 弹出并返回末尾元素

# 列表长度
print(len(fruits))

# 列表切片(同字符串)
print(numbers[1:4])  # [2, 3, 4]

# 遍历列表
for fruit in fruits:
    print(fruit)
列表推导式(List Comprehension)

一种简洁创建列表的方式:

复制代码
# 普通方式
squares = []
for x in range(1, 6):
    squares.append(x**2)

# 推导式方式(推荐)
squares = [x**2 for x in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]

# 带条件的推导式
evens = [x for x in range(10) if x % 2 == 0]

2. 元组(tuple)------ 有序、不可变

元组与列表相似,但创建后不能修改

复制代码
coordinates = (10, 20)
person = ("张三", 25, "北京")
single_item = (42,)  # 单个元素的元组,必须加逗号
元组的特点:
  • 更安全:防止意外修改

  • 性能略高:占用内存更少

  • 可作为字典的键(列表不行)

    访问元素(同列表)

    print(person[0]) # "张三"

    不可修改

    person[0] = "李四" # TypeError!


3. range 对象

表示一个不可变的数字序列,常用于 for 循环。

复制代码
r1 = range(5)        # 0, 1, 2, 3, 4
r2 = range(1, 6)     # 1, 2, 3, 4, 5
r3 = range(0, 10, 2) # 0, 2, 4, 6, 8 (步长为2)

for i in range(3):
    print(i)  # 0, 1, 2

💡 range 不是列表,但可以转换:

复制代码
list(range(5))  # [0, 1, 2, 3, 4]

七、映射类型:字典(dict)

字典是键值对(key-value)的集合,类似于现实生活中的"字典"。

复制代码
student = {
    "name": "王五",
    "age": 22,
    "city": "上海",
    "grades": [85, 90, 78]
}

字典的常用操作:

复制代码
# 访问值
print(student["name"])        # "王五"
print(student.get("age"))     # 22
print(student.get("phone", "未知"))  # 安全访问,键不存在时返回默认值

# 修改/添加值
student["age"] = 23           # 修改
student["major"] = "计算机"    # 添加新键值对

# 删除键值对
del student["city"]
popped = student.pop("grades")  # 弹出并返回值

# 遍历字典
for key in student:
    print(f"{key}: {student[key]}")

# 推荐的遍历方式
for key, value in student.items():
    print(f"{key}: {value}")

# 获取所有键、值、键值对
print(student.keys())    # dict_keys(['name', 'age', 'major'])
print(student.values())  # dict_values(['王五', 23, '计算机'])
print(student.items())   # dict_items([('name', '王五'), ...])
字典推导式
复制代码
# 创建平方数字典
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

八、集合类型

1. 集合(set)------ 无序、唯一

集合存储不重复的元素,且无序。

复制代码
unique_numbers = {1, 2, 3, 3, 4}
print(unique_numbers)  # {1, 2, 3, 4}  重复的3被自动去除
集合的常用操作:
复制代码
set1 = {1, 2, 3}
set2 = {3, 4, 5}

# 并集
print(set1 | set2)  # {1, 2, 3, 4, 5}
print(set1.union(set2))

# 交集
print(set1 & set2)  # {3}
print(set1.intersection(set2))

# 差集
print(set1 - set2)  # {1, 2}
print(set1.difference(set2))

# 对称差集
print(set1 ^ set2)  # {1, 2, 4, 5}

# 添加/删除
set1.add(4)
set1.remove(1)  # 元素必须存在
set1.discard(10)  # 元素不存在也不会报错

2. 冻结集合(frozenset)

不可变的集合,可以作为字典的键。

复制代码
fset = frozenset([1, 2, 3])
# fset.add(4)  # AttributeError!

九、类型转换(Type Casting)

Python 允许在不同类型之间转换。

|----------|-------------------|---------------------------------|
| 函数 | 说明 | 示例 |
| int(x) | 将参数转换为整数类型 | int("123") → 123 |
| float(x) | 将参数转换为浮点数类型 | float("3.14") → 3.14 |
| str(x) | 将参数转换为字符串类型 | str(100) → "100" |
| bool(x) | 将参数转换为布尔值类型 | bool(1) → True |
| list(x) | 将参数转换为列表类型 | list("abc") → ['a', 'b', 'c'] |
| tuple(x) | 将参数转换为元组类型 | tuple([1, 2]) → (1, 2) |
| set(x) | 将参数转换为集合类型,去除重复元素 | set([1, 2, 2]) → {1, 2} |
| dict(x) | 将一系列键值对转换为字典类型 | 需要提供键值对序列 |

请注意,对于`dict(x)`函数的具体示例,通常需要给出一个由键值对组成的可迭代对象作为输入。例如,可以使用列表中的元组来创建字典:dict([("key1", "value1"), ("key2", "value2")])将会得到{"key1": "value1", "key2": "value2"}这样的结果。

复制代码
# 示例:用户输入通常是字符串,需要转换
age_str = input("请输入年龄:")  # "25"
age_int = int(age_str)
print(age_int + 5)  # 30

⚠️ 转换失败会抛出异常:

复制代码
int("abc")  # ValueError!

十、总结:Python 数据类型核心要点

|----------------|---------|----------------|---------|-----------|
| 类型 | 可变性 | 有序性 | 唯一性 | 典型用途 |
| int/ float | ❌ | ❌ | ❌ | 数值计算 |
| str | ❌ | ✅ | ❌ | 文本处理 |
| bool | ❌ | ❌ | ❌ | 逻辑判断 |
| list | ✅ | ✅ | ❌ | 存储有序数据列表 |
| tuple | ❌ | ✅ | ❌ | 存储不可变数据序列 |
| dict | ✅ | ✅(Python 3.7+) | 键唯一 | 存储键值对映射 |
| set | ✅ | ❌ | ✅ | 存储唯一元素集合 |

学习建议:

  1. 熟练掌握 int**,** float**,** str**,** bool**,** list**,** dict ------ 这是最常用的五种类型。
  2. 理解可变与不可变的区别list 可变,tuple 不可变。
  3. 善用推导式:让代码更简洁高效。
  4. 注意类型转换:特别是用户输入和文件读取时。

📌 动手练习

  1. 创建一个包含你个人信息的字典(姓名、年龄、城市等)。

  2. 创建一个列表,存储你喜欢的电影,并用 for 循环打印。

  3. 使用 set 找出两个列表的共同元素。

    示例练习

    my_info = {"name": "你的名字", "age": 20, "hobbies": ["阅读", "编程"]}
    print(f"我叫{my_info['name']},爱好是{', '.join(my_info['hobbies'])}。")

相关推荐
pop_opo_43 分钟前
使用 Python + Pygame 键盘控制无人机(AirSim)
python·无人机·pygame
猿究院-陆昱泽43 分钟前
Redis 五大核心数据结构知识点梳理
redis·后端·中间件
༾冬瓜大侠༿1 小时前
C语言:自定义类型——联合体和枚举
java·c语言·开发语言
yuriy.wang1 小时前
Spring IOC源码篇五 核心方法obtainFreshBeanFactory.doLoadBeanDefinitions
java·后端·spring
程序猿老罗2 小时前
使用Python轻松实现Word到PDF的批量转换
python·pdf·word
咖啡教室3 小时前
程序员应该掌握的网络命令telnet、ping和curl
运维·后端
你的人类朋友4 小时前
Let‘s Encrypt 免费获取 SSL、TLS 证书的原理
后端
老葱头蒸鸡4 小时前
(14)ASP.NET Core2.2 中的日志记录
后端·asp.net
无限进步_4 小时前
【C语言】统计二进制中1的个数:三种方法的比较与分析
c语言·开发语言
jie*4 小时前
小杰机器学习高级(five)——分类算法的评估标准
人工智能·python·深度学习·神经网络·机器学习·分类·回归