第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))       # 0

float() - 转浮点数

将其他类型转换为浮点数

# 整数转浮点数
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}")

本集小结

  1. **int()**:转整数
  2. **float()**:转浮点数
  3. **str()**:转字符串
  4. **list()**:转列表
  5. **tuple()**:转元组
  6. **set()**:转集合(去重)
  7. **dict()**:转字典
  8. **type()**:检查类型
  9. **isinstance()**:判断类型
  10. 隐式转换:Python自动转换
  11. 使用try-except处理转换错误

课后练习

练习1:字符串转数字

将字符串"123"转换为整数和浮点数。

练习2:数字转字符串

将数字123转换为字符串"123"。

练习3:列表去重

使用集合对列表[1,2,2,3,3,3]去重。

练习4:字符串分割

将"Python,Java,C++"按逗号分割成列表。

练习5:列表连接

将["Python", "Java", "C++"]用"|"连接成字符串。

下集预告

下一集我们将学习第30集:数据结构综合练习。这是一个完整的实战项目,将综合运用前面学到的所有数据结构知识。

敬请期待!

« 上一篇 集合基础操作 下一篇 » 数据结构综合练习