python - 我想结合使用 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>]
非常感谢您的努力和方法。
解决方案
地图需要一个可迭代的。您为 map 提供的 lambda 对迭代中的每一行运行一次,但一次只运行一次。所以在 lambda 内部,x
总是只有一行,而不是全部。因此,调用或枚举只有一个部分splitlines
的没有多大意义。x
x
相反,根本不要使用map
,只需在拆分后枚举它们:
list(enumerate(bibel_string.splitlines()))
推荐阅读
- python - 在 SchemaRegistryClient Confluent Kafka 中禁用证书验证
- javascript - 第一次点击路由按钮后Nextjs页面刷新
- python - Django如何检查ModelField中的布尔值是否为真
- swiftui - HStack 行为中带有弹出框的 SwiftUI 多个按钮
- sql - 如何根据命令的数量确定每天要复制多少数据?
- node.js - Sequelize 上的行数错误?
- android - JetPack Compose - 从视图中删除额外的填充
- python - python的新手:当它由重复的副本组成时查询长度的字符串
- http - HTTP是无状态的,而TCP是有状态的?
- javascript - Vanilla Javascript中的圆/线碰撞问题