python - 将 for 循环更改为列表理解
问题描述
所以我的输入文件f
就像
5 100
2 200
8 300
我的输出是一个元组列表:
[(5, 100), (2, 200), (8, 300)]
我的代码如下。
f = open(file_name, "r")
lines = f.readlines()
sets= []
for line in lines:
a, b= line.split(' ')
sets.append((int(a), int(b)))
是否可以将 for 循环转换为列表理解?也有人告诉我列表理解在大多数情况下运行得更快。是这样吗?在可能的情况下将迭代操作转换为更短的列表理解总是一个好习惯吗?
解决方案
with open(file_name, "r") as f:
sets = [tuple(map(int, line.split(" "))) for line in f]
关于您的其他问题:理解通常更快,是的,但并不总是如此,如果没有具体的用例,很难在摘要中发表评论。
您的第二个问题更加固执己见,并且再次因每个用例而异。对于像这样相对简单的操作,我发现列表推导比 for 循环更具可读性和重点(尽管我倾向于尽可能避免嵌套推导 - 注意我使用map
而不是嵌套推导在我的回答中——这只是个人喜好,真的)。此外,并不是所有可以写成 for 循环的东西都可以重写为推导式,也不是所有可以写成推导式的东西都一定要写成推导式。对于更复杂的操作,将其塞进一个理解中通常会使它变得非常不可读,因此在这些情况下,您几乎肯定最好坚持使用 for 循环。
推荐阅读
- android - 如何访问 RecyclerView 中隐藏的 ItemView
- docker - Docker swarm 无法创建具有未知 rpc 错误的网络
- reactjs - React-Native:TextInput 未绑定到空字符串
- javascript - 如何使用 ES6 扩展更新多个对象子字段?
- android - 为什么在 Android 中启动 Activity 需要 Context
- mysql - 按月分组并返回结果为 0 的月份按年份过滤
- java - Java AWT - 每隔一个场合检测到 alt 键
- c# - 如何在不包含外键的连接表上使用可选的 linq 参数?
- android - 我想从文件夹中添加贴纸
- javascript - IE11拖放没有在ondragstart()上调用正确的函数