能否在Python的map函数中获取lambda的迭代序号?
在Python的map中获取迭代索引的方法
当然可行,这里有两种实用的实现方式:
方式一:用enumerate(最推荐)
enumerate是Python专门用来给序列元素添加索引的内置工具,它会把data转换成包含(索引, 元素)元组的迭代器。你只需要在lambda里取出元组里的索引和元素,传给mappingFunction就行:
list(map(lambda item: mappingFunction(item[1], item[0]), enumerate(data)))
要是觉得索引和元素的位置不够直观,也可以用zip配合range实现类似效果,但enumerate更简洁:
list(map(lambda val, idx: mappingFunction(val, idx), data, range(len(data))))
方式二:用itertools.count生成计数器
如果需要自定义索引的起始值(比如从1开始),可以用itertools.count创建一个自增的计数器,每次调用next()拿到当前索引:
from itertools import count counter = count(start=0) # 可以修改start来设置起始索引 list(map(lambda p: mappingFunction(p, next(counter)), data))
注意:这个计数器是有状态的——如果重复遍历对应的map对象,计数器会继续累加不会重置,所以只适合单次迭代的场景。
内容的提问来源于stack exchange,提问作者Phate
相关产品推荐
相关产品推荐

