第29集:数据类型转换
本集学习目标
- 理解数据类型转换的概念
- 掌握基本数据类型的转换
- 学会字符串与数字之间的转换
- 掌握隐式类型转换
- 学会检查数据类型
- 通过实际练习掌握类型转换
为什么需要类型转换?
Python是强类型语言,不同类型的数据不能直接运算,需要先转换类型。
示例:类型不匹配的错误
# 错误:字符串不能直接与数字相加
result = "10" + 5 # TypeError正确:先转换类型
result = int("10") + 5 # 正确
print(result) # 15检查数据类型
type()函数
返回变量的数据类型。
num = 10
text = "hello"
lst = [1, 2, 3]
print(type(num)) # <class 'int'>
print(type(text)) # <class 'str'>
print(type(lst)) # <class 'list'>isinstance()函数
检查变量是否是特定类型。
num = 10
text = "hello"
print(isinstance(num, int)) # True
print(isinstance(num, str)) # False
print(isinstance(text, str)) # True数字类型转换
int() - 转整数
将其他类型转换为整数。
# 字符串转整数
print(int("10")) # 10
print(int("10.5")) # 10(截断小数)
# 浮点数转整数
print(int(10.5)) # 10
# 布尔值转整数
print(int(True)) # 1
print(int(False)) # 0float() - 转浮点数
将其他类型转换为浮点数。
# 整数转浮点数
print(float(10)) # 10.0
# 字符串转浮点数
print(float("10.5")) # 10.5
print(float("10")) # 10.0
# 布尔值转浮点数
print(float(True)) # 1.0
print(float(False)) # 0.0字符串类型转换
str() - 转字符串
将其他类型转换为字符串。
# 数字转字符串
print(str(10)) # "10"
print(str(10.5)) # "10.5"
# 布尔值转字符串
print(str(True)) # "True"
print(str(False)) # "False"
# 列表转字符串
print(str([1, 2, 3])) # "[1, 2, 3]"字符串格式化
使用f-string或format()格式化字符串。
name = "张三"
age = 18
# f-string
message = f"{name}今年{age}岁"
print(message) # 张三今年18岁
# format()
message = "{}今年{}岁".format(name, age)
print(message) # 张三今年18岁列表类型转换
list() - 转列表
将其他类型转换为列表。
# 字符串转列表
print(list("hello")) # ['h', 'e', 'l', 'l', 'o']
# 元组转列表
print(list((1, 2, 3))) # [1, 2, 3]
# 集合转列表
print(list({1, 2, 3})) # [1, 2, 3]
# 字典转列表(只转键)
print(list({"a":1, "b":2})) # ['a', 'b']split() - 字符串转列表
将字符串按分隔符分割成列表。
text = "Python,Java,C++"
# 按逗号分割
print(text.split(",")) # ['Python', 'Java', 'C++']
# 按空格分割
text2 = "Python Java C++"
print(text2.split()) # ['Python', 'Java', 'C++']join() - 列表转字符串
将列表中的字符串连接成一个字符串。
words = ["Python", "Java", "C++"]
# 用逗号连接
result = ",".join(words)
print(result) # Python,Java,C++
# 用空格连接
result = " ".join(words)
print(result) # Python Java C++元组类型转换
tuple() - 转元组
将其他类型转换为元组。
# 列表转元组
print(tuple([1, 2, 3])) # (1, 2, 3)
# 字符串转元组
print(tuple("hello")) # ('h', 'e', 'l', 'l', 'o')
# 集合转元组
print(tuple({1, 2, 3})) # (1, 2, 3)集合类型转换
set() - 转集合
将其他类型转换为集合(会去重)。
# 列表转集合(去重)
print(set([1, 2, 2, 3, 3])) # {1, 2, 3}
# 字符串转集合
print(set("hello")) # {'h', 'e', 'l', 'o'} (无序)
# 元组转集合
print(set((1, 2, 3))) # {1, 2, 3}字典类型转换
dict() - 转字典
将其他类型转换为字典。
# 列表转字典(键值对列表)
pairs = [("name", "张三"), ("age", 18)]
print(dict(pairs)) # {'name': '张三', 'age': 18}
# 元组转字典
pairs = (("name", "李四"), ("age", 20))
print(dict(pairs)) # {'name': '李四', 'age': 20}隐式类型转换
Python在某些情况下会自动转换数据类型。
数字运算
# 整数与浮点数相加
result = 10 + 3.5
print(result) # 13.5
print(type(result)) # <class 'float'>
# 整数与布尔值相加
result = 10 + True
print(result) # 11 (True=1)字符串拼接
# 数字与字符串拼接会自动转换数字为字符串
result = "数字:" + str(10)
print(result) # 数字:10转换错误处理
处理ValueError
当转换失败时会抛出ValueError。
try:
num = int("abc")
except ValueError:
print("无法转换为整数")安全转换函数
def safe_int(value, default=0):
"""安全转换为整数"""
try:
return int(value)
except ValueError:
return default
print(safe_int("10")) # 10
print(safe_int("abc", 0)) # 0实际应用案例
案例1:用户输入处理
# 获取用户输入
age_str = input("请输入年龄:")
# 转换为整数
age = int(age_str)
# 判断
if age >= 18:
print("成年人")
else:
print("未成年")案例2:数据清洗
# 原始数据(包含字符串数字)
data = ["10", "20", "30", "40", "50"]
# 转换为整数
numbers = [int(x) for x in data]
# 计算平均分
average = sum(numbers) / len(numbers)
print(f"平均分:{average}")本集小结
- **int()**:转整数
- **float()**:转浮点数
- **str()**:转字符串
- **list()**:转列表
- **tuple()**:转元组
- **set()**:转集合(去重)
- **dict()**:转字典
- **type()**:检查类型
- **isinstance()**:判断类型
- 隐式转换:Python自动转换
- 使用try-except处理转换错误
课后练习
练习1:字符串转数字
将字符串"123"转换为整数和浮点数。
练习2:数字转字符串
将数字123转换为字符串"123"。
练习3:列表去重
使用集合对列表[1,2,2,3,3,3]去重。
练习4:字符串分割
将"Python,Java,C++"按逗号分割成列表。
练习5:列表连接
将["Python", "Java", "C++"]用"|"连接成字符串。
下集预告
下一集我们将学习第30集:数据结构综合练习。这是一个完整的实战项目,将综合运用前面学到的所有数据结构知识。
敬请期待!