欢迎访问宙启技术站
智能推送

Python内置函数之enumerate的使用方法

发布时间:2023-06-26 07:30:43

Python中的enumerate()函数可以用来将一个列表、元组、字符串、迭代器或其他可迭代对象转化为一个枚举对象。所谓枚举对象,就是将可迭代对象中的每一个元素和它的索引打包成一个元组。

enumerate(iterable, [,start])

enumerate()函数的参数有两个:

- iterable:表示一个可迭代对象,可以是任何序列类型

- start:表示索引的起始值,默认为0

enumerate()函数的返回值是一个枚举对象。枚举对象包含了可迭代对象中每个元素的索引和对应的值。它是一个迭代器,每次迭代返回一个元组,其中第一个元素是当前迭代的索引,第二个元素是迭代器返回的值。

下面是enumerate()函数的基本用法:

fruits = ['apple', 'banana', 'orange']
for idx, fruit in enumerate(fruits):
    print(idx, fruit)

输出结果:

0 apple
1 banana
2 orange

这里我们使用for循环遍历fruits列表,并使用enumerate()函数返回的枚举对象,获取每个元素的索引和对应的值。

如果需要设置enumerate()函数的起始索引,可以将该值作为第二个参数传递给函数。例如:

fruits = ['apple', 'banana', 'orange']
for idx, fruit in enumerate(fruits, 1):
    print(idx, fruit)

输出结果:

1 apple
2 banana
3 orange

这里我们将起始索引设置为1,所以第一个元素的索引为1,而不是默认的0。

在实际开发中,enumerate()函数还可以与其他内置函数等结合使用,实现一些复杂的功能。下面是几个例子:

例1:将列表中的字典按照某个键值进行排序

students = [
    {'name': 'Tom', 'score': 80},
    {'name': 'Jerry', 'score': 90},
    {'name': 'Bob', 'score': 70},
    {'name': 'Alice', 'score': 85},
]

sorted_students = sorted(students, key=lambda x: x['score'])
for idx, student in enumerate(sorted_students, 1):
    print(idx, student['name'], student['score'])

输出结果:

1 Bob 70
2 Tom 80
3 Alice 85
4 Jerry 90

这里我们首先使用内置函数sorted()对students列表进行排序,排序依据是每个元素的score键对应的值。然后,使用enumerate()函数将排序后的列表转化为枚举对象,对每个元素进行编号并输出。

例2:将字符串中的单词反转

sentence = "I love Python"
reverse_sentence = ' '.join(word[::-1] for word in sentence.split())
for idx, word in enumerate(reverse_sentence.split(), 1):
    print(idx, word)

输出结果:

1 I
2 evol
3 nohtyP

这里我们首先将字符串sentence拆分成单词,并反转每个单词。然后,使用join()函数将反转后的单词组成一个新的字符串。最后,使用enumerate()函数将新字符串转化为枚举对象,对每个单词进行编号并输出。

例3:将列表中的奇数和偶数分开

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd_nums = []
even_nums = []
for num in nums:
    if num % 2 == 0:
        even_nums.append(num)
    else:
        odd_nums.append(num)

for idx, num in enumerate(odd_nums, 1):
    print('Odd number {}: {}'.format(idx, num))

for idx, num in enumerate(even_nums, 1):
    print('Even number {}: {}'.format(idx, num))

输出结果:

Odd number 1: 1
Odd number 2: 3
Odd number 3: 5
Odd number 4: 7
Odd number 5: 9
Even number 1: 2
Even number 2: 4
Even number 3: 6
Even number 4: 8
Even number 5: 10

这里我们遍历nums列表,将奇数和偶数分别添加到odd_nums和even_nums列表中。然后,分别使用enumerate()函数将odd_nums和even_nums转化为枚举对象,对每个数进行编号并输出。

总结

enumerate()是Python内置函数之一,可以将一个可迭代对象转化为一个枚举对象,其中每个元素都包含当前的索引和对应的值。这个函数非常适合在遍历列表、元组、字符串等可迭代对象时,需要同时获取每个元素和其索引号的情况下使用。