首页 > 解决方案 > 我想结合使用 map()、lambda 和 enumerate

问题描述

我的要求是让我更熟悉 lambda 的功能:map()、lambda、enumerate() 和 list() 的组合。

在这个阶段我不想使用列表理解或其他功能。

filename = "Bibel.txt"
file = open(filename, mode="r", encoding="latin-1")

bibel_string = file.read()
bibel_list = file.readlines()

file.close()

# that works fine and generates the desired output
list(enumerate(bibel_string.splitlines()[:50], start=1))

# Attempt that does not run as desired
list(map(lambda x: enumerate(x.splitlines(), start=1), bibel_string))[:5]

# Output of attempt
[<enumerate at 0x1969a34b0>,
 <enumerate at 0x1969a35f0>,
 <enumerate at 0x1969a3640>,
 <enumerate at 0x1969a35a0>,
 <enumerate at 0x1969a36e0>]

非常感谢您的努力和方法。

标签: python

解决方案


地图需要一个可迭代的。您为 map 提供的 lambda 对迭代中的每一行运行一次,但一次运行一次。所以在 lambda 内部,x总是只有一行,而不是全部。因此,调用或枚举只有一个部分splitlines的没有多大意义。xx

相反,根本不要使用map,只需在拆分后枚举它们:

list(enumerate(bibel_string.splitlines()))

推荐阅读