Python 的内置函数 enumerate
用于迭代一个可迭代对象(如列表、元组、字符串等)时,返回一个索引和值的元组。它常用于需要在遍历数据时同时获得元素的索引和内容的场景。
下面的内容比较全,可以直接参考目录找自己需要的用法。
目录
语法
enumerate(iterable, start=0)
-
参数说明:
iterable
:可迭代对象(如列表、字符串、元组等)。start
:索引的起始值,默认是 0。
-
返回值:
- 一个
enumerate
对象,每次迭代返回一个包含索引和对应元素的元组(index, element)
。
- 一个
基本用法
示例 1:对列表使用 enumerate
fruits = ["apple", "banana", "cherry"]
# 使用 enumerate 遍历列表
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")
输出:
索引 0: apple
索引 1: banana
索引 2: cherry
示例 2:修改起始索引
fruits = ["apple", "banana", "cherry"]
# 将索引起始值改为 1
for index, fruit in enumerate(fruits, start=1):
print(f"索引 {index}: {fruit}")
输出:
索引 1: apple
索引 2: banana
索引 3: cherry
高级用法
示例 3:对字符串使用 enumerate
text = "hello"
for index, char in enumerate(text):
print(f"字符 {char} 的索引是 {index}")
输出:
字符 h 的索引是 0
字符 e 的索引是 1
字符 l 的索引是 2
字符 l 的索引是 3
字符 o 的索引是 4
示例 4:对元组使用 enumerate
data = (100, 200, 300)
for idx, value in enumerate(data):
print(f"索引 {idx}: 值 {value}")
输出:
索引 0: 值 100
索引 1: 值 200
索引 2: 值 300
示例 5:对字典使用 enumerate
#对字典的键或值添加索引。
scores = {"Alice": 85, "Bob": 90, "Charlie": 95}
# 遍历字典的键值对并添加索引
for idx, (name, score) in enumerate(scores.items(), start=1):
print(f"{idx}. {name}: {score}")
输出:
1. Alice: 85
2. Bob: 90
3. Charlie: 95
结合 enumerate
使用的典型场景
1. 查找元素及其索引
在列表中查找特定元素的位置。
numbers = [10, 20, 30, 40, 50]
# 查找值为 30 的索引
for idx, num in enumerate(numbers):
if num == 30:
print(f"值 30 的索引是 {idx}")
break
输出:
值 30 的索引是 2
2. 同时更新索引和值
在遍历时,更新列表中每个元素的值。
numbers = [10, 20, 30, 40, 50]
# 将每个值加上其索引
for idx, num in enumerate(numbers):
numbers[idx] = num + idx
print(numbers)
输出:
[10, 21, 32, 43, 54]
3. 绘制图形时使用 enumerate
import matplotlib.pyplot as plt
# 数据点
y = [10, 20, 30, 40]
# 绘制折线图
plt.plot(y, marker='o', label="Data")
# 为每个数据点添加索引标签
for idx, value in enumerate(y):
plt.text(idx, value + 1, f"{idx}: {value}", ha='center')
plt.title("Line Plot with Index Labels")
plt.xlabel("Index")
plt.ylabel("Value")
plt.legend()
plt.show()
结果:
总结
enumerate
的优点
- 方便地获取索引和值:避免手动维护计数器变量(如
i += 1
)。 - 代码简洁易读:尤其是在循环中,同时需要索引和值时。
- 支持起始索引设置:通过
start
参数灵活调整索引的起点。
典型使用场景
- 遍历列表、元组、字符串时,同时需要索引和值。
- 数据更新或标注索引。
- 查找特定元素的位置。
- 数据处理(如生成包含索引和值的字典或列表)。