Python中利用enumerate()精简循环中的索引和元素访问

Python中,enumerate() 函数是一个内置函数,用于在遍历序列(如列表、元组或字符串)时同时获取每个元素的索引和值。可以使代码更简洁、更易读,特别是在需要索引时。使用 enumerate() 可以避免使用传统的范围(range())和长度(len())组合来访问元素和它们的索引。

1、不使用 enumerate() 函数

不使用enumerate()时,如要在循环中获取每个元素及其索引,一般操作如下,

my_list = ['a', 'b', 'c', 'd']
for i in range(len(my_list)):
    print(f"索引:{i}, 元素:{my_list[i]}")

2、使用enumerate()函数

enumerate()是最常用且推荐的方法,因为它既简洁又直观。可以在循环过程中获取每个元素的索引和值。

my_list = ['apple', 'banana', 'cherry']
for index, item in enumerate(my_list):
print(f"索引:{index}, 元素:{item}")

如要从非零索引开始计数,可以给enumerate()提供一个start参数:

my_list = ['apple', 'banana', 'cherry']
for index, item in  enumerate(my_list, start=1):
    print(f"索引:{index}, 元素:{item}")

3、使用zip()结合range()

如要在循环中同时访问多个列表的元素及其索引,可以使用zip()range()结合的方法。这种方法特别适用于处理多个并行的序列。

my_list = ['apple', 'banana', 'cherry']
my_list2 = ['dog', 'cat', 'bird']
for index, (item1, item2) in enumerate(zip(my_list, my_list2)):
    print(f"索引:{index}, 列表1元素:{item1}, 列表2元素:{item2}")

4、函数说明

1)enumerate() 函数

enumerate() 函数是 Python 中的一个内置函数,非常有用,特别是当你需要在迭代一个序列的同时跟踪元素的索引时。可以将一个可迭代对象(如列表、元组、字符串等)组合为一个索引序列,同时列出数据和数据下标,通常用于 for 循环中。

enumerate(iterable, start=0)

参数

说明

iterable

一个可以迭代的对象,如列表、元组或字符串等。

start

可选参数,指定索引起始值,默认为 0。

enumerate() 函数返回一个枚举对象。这个枚举对象生成由两个元素组成的元组,分别是索引和在可迭代对象中的值。

2)zip() 函数

Python 的 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表的长度与最短的对象相同。利用 * 操作符,这个函数可以用于解压列表。

# 示例 1: 基本用法
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
zipped = zip(numbers, letters)
print(list(zipped))  # 输出:[(1, 'a'), (2, 'b'), (3, 'c')]

# 示例 2: 处理不同长度的可迭代对象
numbers = [1, 2, 3]
letters = ['a', 'b']
zipped = zip(numbers, letters)
print(list(zipped))  # 输出:[(1, 'a'), (2, 'b')]

# 示例 3: 解压操作
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
numbers, letters = zip(*pairs)
print(numbers)  # 输出:(1, 2, 3)
print(letters)  # 输出:('a', 'b', 'c')

3)range() 函数

Python 的 range() 函数是一个不可或缺的内置函数,它生成一个数字序列。这个函数非常实用,常用于循环中迭代指定的次数。

range(start, stop[, step])

参数

描述

start

序列的开始值。如果省略,默认从 0 开始。包括此值。

stop

序列结束的边界,不包括此值。这是一个必须指定的参数。

step

步长,默认值为 1。如果指定了此参数,则必须不为 0

# 只指定 stop 参数
print("只指定 stop 参数:")
for i in range(5):
    print(i, end=' ')
print('\n')

# 指定 start 和 stop 参数
print("指定 start 和 stop 参数:")
for i in range(2, 6):
    print(i, end=' ')
print('\n')

# 同时指定 start、stop 和 step 参数
print("同时指定 start、stop 和 step 参数:")
for i in range(0, 10, 2):
    print(i, end=' ')
print('\n')

# 将 range() 的结果转换为列表
numbers = list(range(5))
print("将 range() 的结果转换为列表:")
print(numbers)

推荐阅读
cjavapy编程之路首页