首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >零基础吃透Python六大基础+四大容器数据类型

零基础吃透Python六大基础+四大容器数据类型

原创
作者头像
风一样的男子
发布2026-06-24 11:26:28
发布2026-06-24 11:26:28
1300
举报
文章被收录于专栏:编程教程编程教程

从整理书房说起

我有个朋友最近在学Python,他问我一个问题:

"整数、浮点数、字符串这些我能理解,但列表、元组、字典、集合到底是干嘛用的?为什么要分这么多种?"

我想了想,跟他说:"你整理过书房吗?"

他愣了一下:"整理过啊,把书分类放。"

"那就是了。整数、浮点数这些是'书',列表、字典这些是'书架'。书的种类有限,但书架的设计各有不同——有的按顺序排列,有的可以随意抽放,有的带标签分类。"

他恍然大悟:"原来如此!"

今天我们就用这个"书和书架"的比喻,把Python里的基础数据类型和容器数据类型一次性说清楚。


第一部分:六大基础数据类型(单本书)

基础数据类型就像是单本书。每一本都有自己的特点和用途。

1. 整数(int)——页码和数量

整数就是不带小数点的数:-2042999

代码语言:javascript
复制
age = 25
count = -3
year = 2024

整数在Python里没有大小限制。你可以写一个1000位的整数,Python照样能处理(虽然会慢一点)。

代码语言:javascript
复制
huge = 10 ** 100  # 1后面100个0,完全没问题

什么时候用它? 计数、索引、循环次数、年龄、数量——一切不需要小数的数字。

2. 浮点数(float)——带小数的测量值

浮点数就是带小数点的数:3.14-0.52.0

代码语言:javascript
复制
price = 99.9
pi = 3.1415926
temperature = -5.5

需要注意:浮点数在计算机里是近似存储的0.1 + 0.2 == 0.3 的结果是False,因为0.1+0.2实际上是0.30000000000000004

代码语言:javascript
复制
print(0.1 + 0.2)  # 0.30000000000000004

如果要做精确的金额计算,用decimal.Decimal,别用浮点数。

什么时候用它? 价格、测量值、科学计算——一切需要小数的地方。

3. 布尔值(bool)——真与假

布尔值只有两个:TrueFalse

代码语言:javascript
复制
is_login = True
is_admin = False
has_permission = 5 > 3  # True

在Python里,布尔值其实是整数(True是1,False是0),但不要依赖这个特性——它会让代码变得难懂。

代码语言:javascript
复制
# 可以这样写,但别这样写
result = True + False  # 1

什么时候用它? 条件判断、开关控制、标志位——一切需要"是/否"的地方。

4. 字符串(str)——文本内容

字符串就是文本,用引号包起来。

代码语言:javascript
复制
name = "张三"
message = '你好'
multiline = """第一行
第二行
第三行"""

字符串的常见操作:

代码语言:javascript
复制
s = "hello world"
print(len(s))        # 11,长度
print(s.upper())     # HELLO WORLD,大写
print(s.split())     # ['hello', 'world'],分割
print(s[0])          # h,取第一个字符
print(s[6:11])       # world,切片

字符串在Python里是不可变的——你不能修改字符串里的某个字符,只能创建新字符串。

代码语言:javascript
复制
s = "hello"
# s[0] = "H"  # 报错!
s = "H" + s[1:]  # 创建新字符串 "Hello"

什么时候用它? 所有的文本处理——用户输入、文件内容、数据库字段、API返回数据。

5. 字节(bytes)——二进制数据

字节是计算机最底层的表示方式,由0255的数字组成。

代码语言:javascript
复制
b = b"hello"          # 直接创建
b = bytes([72, 101])  # 从列表创建,代表"He"

字符串和字节之间的转换很常用:

代码语言:javascript
复制
text = "你好"
byte_data = text.encode("utf-8")  # 字符串→字节
text_back = byte_data.decode("utf-8")  # 字节→字符串

什么时候用它? 文件读写(非文本文件)、网络传输、加密解密——一切需要处理二进制数据的地方。

6. None——"什么都没有"

None表示"没有值",相当于其他语言的nullnil

代码语言:javascript
复制
result = None
data = function_that_might_fail()  # 如果失败返回None

if data is None:
    print("没有数据")

注意:判断是否为None要用is,不要用==

代码语言:javascript
复制
# 正确
if x is None:
    pass

# 不推荐
if x == None:
    pass

什么时候用它? 表示"无"、"空"、"未初始化"——一个占位符,说明这里暂时没有值。


第二部分:四大容器数据类型(书架)

容器就像书架,用来存放多本书(数据)。不同设计的书架,适合不同场景。

1. 列表(list)——按顺序排放的书架

列表是最常用的容器,用方括号表示,有序、可变

代码语言:javascript
复制
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]  # 可以混放不同类型

列表的常见操作:

代码语言:javascript
复制
fruits = ["苹果", "香蕉", "橙子"]

# 增
fruits.append("葡萄")      # 末尾添加
fruits.insert(1, "草莓")   # 指定位置插入

# 删
fruits.remove("香蕉")      # 删除指定元素
last = fruits.pop()        # 删除并返回最后一个

# 改
fruits[0] = "芒果"         # 修改指定位置

# 查
print(fruits[0])           # 取第一个
print(fruits[-1])          # 取最后一个
print(fruits[1:3])         # 切片,取第1到第2个

# 遍历
for fruit in fruits:
    print(fruit)

列表推导式(Python的特色写法):

代码语言:javascript
复制
# 传统写法
squares = []
for i in range(10):
    squares.append(i**2)

# 列表推导式(更Pythonic)
squares = [i**2 for i in range(10)]

# 带条件
even_squares = [i**2 for i in range(10) if i % 2 == 0]

什么时候用列表? 你需要保持顺序、允许重复元素、随时增删改。比如:待办事项列表、排行榜、购物车。

2. 元组(tuple)——不能修改的列表

元组用圆括号表示,有序、不可变

代码语言:javascript
复制
point = (10, 20)
rgb = (255, 0, 128)
person = ("张三", 25, "北京")
single = (5,)  # 单个元素必须加逗号

元组和列表的区别:元组创建后不能修改

代码语言:javascript
复制
point = (10, 20)
# point[0] = 5  # 报错!不能修改

为什么需要元组?

  • 数据不该被修改时(比如坐标、配置),用元组更安全
  • 元组占用的内存比列表小
  • 元组可以作为字典的键,列表不行
代码语言:javascript
复制
location = (39.9, 116.4)  # 经纬度,不应该被修改

# 元组作为字典键
cache = {}
cache[(1, 2)] = "value"  # 合法
# cache[[1, 2]] = "value"  # 报错,列表不能当键

元组的解包(拆包)很方便:

代码语言:javascript
复制
point = (10, 20)
x, y = point  # x=10, y=20

# 交换变量本质上就是元组解包
a, b = b, a

什么时候用元组? 数据不需要修改、想保护数据不被意外修改、需要作为字典键

3. 字典(dict)——带标签的抽屉

字典用花括号表示,键值对存储、可变、无序(Python 3.7之后保持插入顺序)。

代码语言:javascript
复制
person = {
    "name": "张三",
    "age": 25,
    "city": "北京"
}

# 或者用dict()创建
person = dict(name="张三", age=25, city="北京")

字典的常见操作:

代码语言:javascript
复制
# 增/改
person["job"] = "工程师"   # 新增
person["age"] = 26        # 修改

# 删
del person["city"]        # 删除键值对
age = person.pop("age")   # 删除并返回值

# 查
print(person["name"])     # 取值(键不存在会报错)
print(person.get("name")) # 取值(键不存在返回None)
print(person.get("email", "无"))  # 不存在时返回默认值

# 遍历
for key in person:
    print(key, person[key])

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

字典的键必须是不可变类型(字符串、整数、浮点数、元组),值可以是任意类型。

代码语言:javascript
复制
# 键不可变
d = {
    "name": "张三",      # 字符串做键 ✅
    1: "一",            # 整数做键 ✅
    (1, 2): "坐标",      # 元组做键 ✅
    # [1, 2]: "列表"    # 列表做键 ❌
}

字典推导式:

代码语言:javascript
复制
squares = {i: i**2 for i in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

什么时候用字典? 需要通过键名来查找数据、键值对结构天然匹配你的数据。比如:用户信息(通过用户名查详情)、配置参数(通过参数名查值)。

4. 集合(set)——只关心"在不在"

集合用花括号表示,无序、元素唯一、可变

代码语言:javascript
复制
fruits = {"苹果", "香蕉", "橙子"}
numbers = {1, 2, 3, 3, 4}  # 自动去重,变成{1, 2, 3, 4}

集合的核心操作:

代码语言:javascript
复制
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}

# 增
s1.add(5)

# 删
s1.remove(1)     # 删除(不存在会报错)
s1.discard(10)   # 删除(不存在不报错)

# 集合运算
print(s1 | s2)   # 并集 {1,2,3,4,5,6}
print(s1 & s2)   # 交集 {3,4}
print(s1 - s2)   # 差集 {1,2}
print(s1 ^ s2)   # 对称差集 {1,2,5,6}

判断元素是否存在非常快(哈希查找,O(1)复杂度):

代码语言:javascript
复制
huge_list = list(range(1000000))
huge_set = set(huge_list)

# 集合查找速度快得多
print(999999 in huge_set)   # 瞬间完成

什么时候用集合? 去重、成员关系判断(某个元素是否存在)、集合运算(交集、并集)。


第三部分:类型转换——在不同书架之间搬运书

Python提供了内置函数来转换类型:

代码语言:javascript
复制
# 转整数
int("123")      # 123
int("12.5")     # 报错,字符串必须是纯数字

# 转浮点数
float("3.14")   # 3.14
float(5)        # 5.0

# 转字符串
str(123)        # "123"
str(3.14)       # "3.14"

# 转列表
list("hello")   # ['h', 'e', 'l', 'l', 'o']
list((1, 2, 3)) # [1, 2, 3]

# 转元组
tuple([1, 2, 3])  # (1, 2, 3)

# 转字典
dict([("a", 1), ("b", 2)])  # {'a': 1, 'b': 2}

# 转集合
set([1, 2, 2, 3])  # {1, 2, 3} 自动去重

第四部分:一张表格总结

类型

写法

有序

可变

元素唯一

用途

整数

42

-

-

-

计数、索引

浮点数

3.14

-

-

-

测量、价格

布尔值

True/False

-

-

-

条件判断

字符串

"hello"

-

文本

字节

b"hello"

-

二进制数据

None

None

-

-

-

空值占位

列表

[1,2,3]

有序可变序列

元组

(1,2,3)

不可变序列

字典

{"a":1}

✅(3.7+)

键唯一

键值对查找

集合

{1,2,3}

去重、成员判断


最后一句总结

  • 基础类型:整数(数量)、浮点数(测量)、布尔(真/假)、字符串(文本)、字节(二进制)、None(空)
  • 列表:需要顺序排列、随时修改 → 用列表
  • 元组:顺序排列、不该修改 → 用元组
  • 字典:需要按名字查找 → 用字典
  • 集合:只关心在不在、要去重 → 用集合

下次你写代码时,先想清楚数据是什么"书",需要放在哪种"书架"上。选对了容器,代码自然就顺了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从整理书房说起
  • 第一部分:六大基础数据类型(单本书)
    • 1. 整数(int)——页码和数量
    • 2. 浮点数(float)——带小数的测量值
    • 3. 布尔值(bool)——真与假
    • 4. 字符串(str)——文本内容
    • 5. 字节(bytes)——二进制数据
    • 6. None——"什么都没有"
  • 第二部分:四大容器数据类型(书架)
    • 1. 列表(list)——按顺序排放的书架
    • 2. 元组(tuple)——不能修改的列表
    • 3. 字典(dict)——带标签的抽屉
    • 4. 集合(set)——只关心"在不在"
  • 第三部分:类型转换——在不同书架之间搬运书
  • 第四部分:一张表格总结
  • 最后一句总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档