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