# 🐍 前端开发 0 基础学 Python 入门指南:常用的数据类型和列表

Python 数据类型完全指南 - 前端开发者视角

📌 前言

作为前端开发者,你已经熟悉了 JavaScript 的数据类型。Python 的数据类型既有相似之处,也有独特的设计哲学。本文将从前端视角深入解析 Python 的核心数据类型。


1️⃣ 数字类型 (Numeric Types)

Python 提供了三种主要的数字类型:

int - 整数类型

python 复制代码
# Python 的 int 没有大小限制(JS 有 Number.MAX_SAFE_INTEGER)
age = 25
big_number = 999999999999999999999999999999  # Python 可以处理任意大的整数

# 不同进制表示
binary = 0b1010      # 二进制:10
octal = 0o12         # 八进制:10
hexadecimal = 0xa    # 十六进制:10

float - 浮点数类型

python 复制代码
# 类似 JS 的 Number
price = 19.99
scientific = 1.5e-3  # 0.0015

# 注意浮点数精度问题(和 JS 一样)
print(0.1 + 0.2)  # 0.30000000000000004

complex - 复数类型

python 复制代码
# JS 没有原生复数支持
z = 3 + 4j
print(z.real)  # 3.0
print(z.imag)  # 4.0

与 JS 对比:

  • JS 只有一个 Number 类型(内部是 64 位浮点数)
  • Python 区分 intfloat,且 int 无大小限制
  • Python 原生支持复数运算

2️⃣ 文本类型 (Text Type)

str - 字符串类型

python 复制代码
# 三种定义方式
single = 'Hello'
double = "World"
multi_line = """
这是多行
字符串
"""

# 字符串是不可变的(immutable)- 和 JS 一样
text = "Python"
# text[0] = 'J'  # ❌ 报错!

# 常用方法
s = "  hello world  "
print(s.strip())           # "hello world" - 去除首尾空白
print(s.upper())           # "  HELLO WORLD  "
print(s.replace("o", "0")) # "  hell0 w0rld  "
print(s.split())           # ['hello', 'world']

# 格式化字符串
name = "张三"
age = 25
# f-string (推荐,类似 JS 模板字符串)
print(f"{name} 今年 {age} 岁")
# format 方法
print("{} 今年 {} 岁".format(name, age))

与 JS 对比:

  • Python 的三引号字符串更方便处理多行文本
  • Python 没有模板字符串 `````,但有 f-string
  • 字符串方法名称有差异(如 split() vs split()

3️⃣ 序列类型 (Sequence Types) ⭐

这是本文的重点!Python 有三种核心序列类型。

📋 List - 列表(可变序列)

类比: 最接近 JS 的数组 Array

python 复制代码
# 创建列表
fruits = ['apple', 'banana', 'cherry']
mixed = [1, "two", 3.0, [4, 5]]  # 可以混合类型
empty = []
range_list = list(range(5))  # [0, 1, 2, 3, 4]

# 访问元素
print(fruits[0])      # 'apple'
print(fruits[-1])     # 'cherry' - 负索引从末尾开始
print(fruits[0:2])    # ['apple', 'banana'] - 切片

# 修改元素(可变!)
fruits[1] = 'blueberry'
print(fruits)  # ['apple', 'blueberry', 'cherry']
🔥 List 常用方法详解
1. 添加元素
python 复制代码
fruits = ['apple', 'banana']

# append() - 在末尾添加一个元素(类似 JS push)
fruits.append('cherry')
print(fruits)  # ['apple', 'banana', 'cherry']

# insert() - 在指定位置插入元素
fruits.insert(1, 'blueberry')
print(fruits)  # ['apple', 'blueberry', 'banana', 'cherry']

# extend() - 合并另一个列表(类似 JS concat,但会修改原列表)
fruits.extend(['date', 'elderberry'])
print(fruits)  # ['apple', 'blueberry', 'banana', 'cherry', 'date', 'elderberry']

# + 运算符 - 连接列表(不修改原列表,类似 JS concat)
new_fruits = fruits + ['fig', 'grape']
2. 删除元素
python 复制代码
fruits = ['apple', 'banana', 'cherry', 'banana']

# remove() - 删除第一个匹配的值
fruits.remove('banana')
print(fruits)  # ['apple', 'cherry', 'banana']

# pop() - 删除并返回指定索引的元素(默认最后一个)
last = fruits.pop()      # 'banana'
first = fruits.pop(0)    # 'apple'
print(fruits)            # ['cherry']

# del - 删除指定索引或切片
fruits = ['a', 'b', 'c', 'd']
del fruits[1]     # ['a', 'c', 'd']
del fruits[0:2]   # ['d']

# clear() - 清空列表
fruits.clear()
print(fruits)  # []
3. 查找和计数
python 复制代码
numbers = [1, 2, 3, 2, 4, 2, 5]

# index() - 查找元素首次出现的索引(类似 JS indexOf)
print(numbers.index(2))        # 1
print(numbers.index(2, 2))     # 从索引2开始查找:3

# count() - 统计元素出现次数
print(numbers.count(2))  # 3

# in 运算符 - 检查元素是否存在(类似 JS includes)
print(2 in numbers)      # True
print(10 in numbers)     # False
4. 排序和反转
python 复制代码
numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# sort() - 就地排序(修改原列表)
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 6, 9]

numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 4, 3, 2, 1, 1]

# sorted() - 返回新的排序列表(不修改原列表)
original = [3, 1, 4]
new_sorted = sorted(original)
print(original)   # [3, 1, 4]
print(new_sorted) # [1, 3, 4]

# reverse() - 反转列表
numbers = [1, 2, 3]
numbers.reverse()
print(numbers)  # [3, 2, 1]
5. 列表推导式(List Comprehension)⭐
python 复制代码
# 这是 Python 的杀手级特性!类似 JS 的 map + filter 组合

# 基础用法
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 带条件过滤
even_squares = [x**2 for x in range(10) if x % 2 == 0]
# [0, 4, 16, 36, 64]

# 多层嵌套
matrix = [[i*j for j in range(3)] for i in range(3)]
# [[0, 0, 0], [0, 1, 2], [0, 2, 4]]

# JS 对比:
# const squares = Array.from({length: 10}, (_, i) => i**2);
# const evenSquares = [...Array(10).keys()].filter(x => x%2===0).map(x => x**2);
6. 其他实用方法
python 复制代码
# len() - 获取长度(类似 JS .length)
print(len([1, 2, 3]))  # 3

# sum() - 求和(JS 需要 reduce)
print(sum([1, 2, 3, 4]))  # 10

# min() / max() - 最小值/最大值
print(min([3, 1, 4]))  # 1
print(max([3, 1, 4]))  # 4

# 列表拷贝
original = [1, 2, 3]
shallow_copy = original.copy()  # 或 original[:]
import copy
deep_copy = copy.deepcopy(original)
🎯 List vs JS Array 核心差异
特性 Python List JS Array
索引 支持负索引 -1 表示最后一个 只支持正索引
切片 arr[1:3] 原生支持 需要 arr.slice(1, 3)
修改方法 大多直接修改原列表 部分返回新数组
推导式 列表推导式 [x*2 for x in arr] map/filter 链式调用
多维数组 需要嵌套列表 同样嵌套

🔒 Tuple - 元组(不可变序列)

类比: JS 没有直接对应物,可以理解为"只读数组"

python 复制代码
# 创建元组
coordinates = (3, 4)
single = (1,)          # 单元素元组需要逗号
empty = ()
no_parentheses = 1, 2, 3  # 也是元组

# 访问元素
print(coordinates[0])  # 3
print(coordinates[-1]) # 4

# 不可修改!
# coordinates[0] = 5   # ❌ TypeError

# 解包(Unpacking)
x, y = coordinates
print(x, y)  # 3 4

# 元组常用于函数返回多个值
def get_user_info():
    return "张三", 25, "北京"

name, age, city = get_user_info()

使用场景:

  • 保护数据不被修改(如配置、常量)
  • 字典的键(list 不能作为键)
  • 函数返回多个值
  • 性能优于 list(占用内存更小)

📏 Range - 范围对象

类比: 类似 JS 的 Array.from({length: n}, (_, i) => i) 或新的数组填充方法

python 复制代码
# 创建 range
r1 = range(5)           # 0, 1, 2, 3, 4
r2 = range(2, 8)        # 2, 3, 4, 5, 6, 7
r3 = range(0, 10, 2)    # 0, 2, 4, 6, 8(步长为2)
r4 = range(10, 0, -1)   # 10, 9, 8, ..., 1(倒序)

# range 是惰性求值,不占用内存
for i in range(1000000):
    pass  # 不会创建100万个数字的列表

# 转换为列表
numbers = list(range(5))  # [0, 1, 2, 3, 4]

# 常用于循环
for i in range(3):
    print(f"第 {i+1} 次循环")

与 JS 对比:

javascript 复制代码
// JS 创建数字序列的几种方式
Array.from({length: 5}, (_, i) => i)           // [0,1,2,3,4]
[...Array(5).keys()]                            // [0,1,2,3,4]
Array(5).fill(0).map((_, i) => i)              // [0,1,2,3,4]

// Python 更简洁
list(range(5))  # [0, 1, 2, 3, 4]

关键区别:

  • range 是生成器,不占内存(JS 会立即创建数组)
  • range 只能生成整数序列
  • Python 的 range 更高效,适合大规模循环

4️⃣ 映射类型 (Mapping Type)

🗺️ Dict - 字典

类比: 等同于 JS 的 ObjectMap

python 复制代码
# 创建字典
user = {
    'name': '张三',
    'age': 25,
    'email': 'zhangsan@example.com'
}

# 访问元素
print(user['name'])        # '张三'
print(user.get('phone'))   # None(不存在时不报错)
print(user.get('phone', '无'))  # '无'(提供默认值)

# 修改和添加
user['age'] = 26
user['phone'] = '13800138000'

# 删除
del user['email']
removed = user.pop('phone')  # 删除并返回值

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

for key, value in user.items():
    print(f"{key}: {value}")

# 检查键是否存在
if 'name' in user:
    print("存在")

# 常用方法
print(user.keys())    # dict_keys(['name', 'age'])
print(user.values())  # dict_values(['张三', 26])
print(user.items())   # dict_items([('name', '张三'), ('age', 26)])

与 JS 对比:

javascript 复制代码
// JS Object
const user = { name: '张三', age: 25 }
user.name // 或 user['name']

// JS Map(更接近 Python dict)
const map = new Map([
  ['name', '张三'],
  ['age', 25],
])
map.get('name')

5️⃣ 集合类型 (Set Types)

📦 Set - 集合

类比: 等同于 JS 的 Set

python 复制代码
# 创建集合(自动去重)
numbers = {1, 2, 3, 2, 1}
print(numbers)  # {1, 2, 3}

# 集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a | b)  # 并集:{1, 2, 3, 4, 5, 6}
print(a & b)  # 交集:{3, 4}
print(a - b)  # 差集:{1, 2}
print(a ^ b)  # 对称差:{1, 2, 5, 6}

# 添加和删除
a.add(5)
a.remove(1)
a.discard(10)  # 不存在也不报错

6️⃣ 布尔类型 (Boolean Type)

python 复制代码
# True / False(注意大写)
is_active = True
is_deleted = False

# 真值测试(和 JS 类似但有差异)
# 假值:False, None, 0, 0.0, '', [], {}, ()
if []:
    print("不会执行")

# 布尔运算
print(True and False)  # False(JS 用 &&)
print(True or False)   # True(JS 用 ||)
print(not True)        # False(JS 用 !)

7️⃣ 空值类型

python 复制代码
# None(相当于 JS 的 null)
result = None

if result is None:
    print("result 是 None")

# 注意:用 is 而不是 ==
# Python 区分 None 和 0、False、空字符串

📊 数据类型总结对照表

Python 类型 JS 对应 可变性 主要用途
int Number 不可变 整数运算
float Number 不可变 浮点运算
str String 不可变 文本处理
list Array 可变 动态数据集合
tuple 不可变 固定数据集合
dict Object/Map 可变 键值对映射
set Set 可变 去重、集合运算
bool Boolean 不可变 逻辑判断
None null/undefined 不可变 表示空值

🎯 最佳实践建议

1. 选择合适的数据类型

python 复制代码
# ✅ 使用元组表示固定数据
RGB_RED = (255, 0, 0)

# ✅ 使用列表表示动态数据
shopping_cart = ['apple', 'banana']
shopping_cart.append('cherry')

# ✅ 使用集合去重
unique_ids = set([1, 2, 2, 3])  # {1, 2, 3}

# ✅ 使用字典表示结构化数据
user = {'id': 1, 'name': '张三'}

2. 列表推导式优于循环

python 复制代码
# ❌ 不推荐
squares = []
for x in range(10):
    squares.append(x**2)

# ✅ 推荐
squares = [x**2 for x in range(10)]

3. 使用 get() 安全访问字典

python 复制代码
# ❌ 可能报 KeyError
value = user['phone']

# ✅ 安全访问
value = user.get('phone', '未设置')

4. 利用解包简化代码

python 复制代码
# ✅ 元组解包
x, y = (3, 4)

# ✅ 列表解包
first, *rest = [1, 2, 3, 4]  # first=1, rest=[2,3,4]

# ✅ 字典解包
user = {**default_user, **custom_user}

🚀 进阶主题

1. 深拷贝 vs 浅拷贝

python 复制代码
import copy

original = [[1, 2], [3, 4]]
shallow = original.copy()
deep = copy.deepcopy(original)

original[0][0] = 999
print(shallow)  # [[999, 2], [3, 4]] - 受影响
print(deep)     # [[1, 2], [3, 4]] - 不受影响

2. 字典推导式

python 复制代码
# 类似列表推导式
squares_dict = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

3. 链式比较

python 复制代码
# Python 特有
x = 5
if 0 < x < 10:  # 相当于 0 < x and x < 10
    print("x 在 0 到 10 之间")

📚 总结

作为前端开发者学习 Python,重点掌握以下几点:

  1. List(列表) 是最常用的数据结构,类似 JS 数组但更强大
  2. Tuple(元组) 用于不可变数据,JS 中没有直接对应
  3. Dict(字典) 等同于 JS 对象/Map,但语法略有不同
  4. Range 是惰性求值的数字序列,比 JS 数组生成更高效
  5. 列表推导式 是 Python 的杀手级特性,比 JS 的 map/filter 更简洁

掌握这些数据类型,你就能流畅地编写 Python 代码了!🎉


🔗 延伸阅读


本文档最后更新:2025 年 10 月 23 日

相关推荐
1_2_3_5 小时前
神级JS API,谁用谁好用
前端·javascript
南枝异客5 小时前
查找算法-顺序查找
python·算法
冬至已至5 小时前
AI 时代的自动化信息获取与整合
前端
花开花富贵5 小时前
不敢去表白?来用代码画♥
python
用户6600676685395 小时前
从送花表白实例读懂 JavaScript 对象字面量与代理模式
javascript
我是日安5 小时前
从零到一打造 Vue3 响应式系统 Day 29 - readonly:数据保护实现
前端·javascript·vue.js
时代拖油瓶5 小时前
我劝你必须知道——Intl.Segmenter
前端·javascript
韭菜炒大葱5 小时前
对象字面量与JSON:JavaScript中最强大的数据结构
javascript
海在掘金611275 小时前
从"万能函数"到"精准工具":泛型如何消除重复代码
前端