如何将带计数器的循环改写为Python列表推导式?
解决列表推导式中添加递增计数器的问题
这问题太常见啦!你手动维护counter的循环逻辑,刚好可以用Python内置的enumerate()函数来转成列表推导式,它能帮你在遍历的同时拿到元素和对应的索引值,这个索引就相当于你原来的counter。
先看你原来的循环代码:
create_list = [] counter = 0 for x in my_list: create_list.append(f(x+counter)) counter += 1
改成列表推导式的写法非常简洁:
create_list = [f(x + idx) for idx, x in enumerate(my_list)]
补充说明:
enumerate(my_list)会返回一系列元组,每个元组是(索引值, 对应元素),索引默认从0开始,和你原来的counter初始值完全一致。- 每次迭代时
idx会自动递增1,完全替代了你手动counter += 1的操作。 - 如果你的计数器需要从非0数字开始(比如从1),只需要给
enumerate加第二个参数就行:create_list = [f(x + idx) for idx, x in enumerate(my_list, 1)]
举个实际例子验证:假设f = lambda n: n * 2,my_list = [1, 2, 3],用原来的循环得到[2, 6, 10],用上面的列表推导式得到的结果完全相同,完美匹配你的需求!
内容的提问来源于stack exchange,提问作者George




