python - Python 枚举
问题描述
我在下面列出了一个代码,它接受一个列表,然后返回一个新列表,其中每隔一个值被删除。
有人可以向我解释这段代码是如何工作的吗?我知道枚举函数会将列表放入元组列表中。示例:[1,2,3,4,5] 将转到 (0,1) (1,2) (2,3) (3,4) (4,5)
问题1:在代码中,为什么在return语句的for循环之前列出“val”,然后在for之后第二次列出?
问题 2:在单词“for”之后是 i 表示来自枚举的结果元组的索引 0?
问题3:在“for”这个词之后是枚举结果元组的索引1的val吗?
代码:
def remove_every_other(lst):
return [val for i,val in enumerate(lst) if i % 2 == 0]
print(remove_every_other([1,2,3,4,5])) # [1,3,5]
解决方案
关于 Q1,这只是一个列表理解语法。在您的函数中,它创建一个列表并返回它。可以将其重写为常规 for 循环,例如
def remove_every_other(lst):
result = []
for i, val in enumerate(lst):
if i % 2 == 0:
result.append(val)
return result
在 Python 中,列表推导是一种更自然的方式来做同样的事情。
Q2 和 Q3 的答案是肯定的。
如果它看起来像这样,我认为该功能会更容易理解
def remove_every_other(lst):
return [i for i in lst if i % 2 != 0]
print(remove_every_other([1,2,3,4,5])) # [1,3,5]
推荐阅读
- android - 在轮播页面中向另一个内容发送数据
- kotlin - 根据 Kotlin 中的按钮单击设置 textview 可见性
- jquery - 证明剑道 UI 图表
- python - 从另一个python文件的函数返回结果
- python - Git bash 不显示 python 的实时更新
- spring - Spring Boot @Async 与 @PostConstruct 一起使用
- android - 是什么导致错误 java.lang.IllegalArgumentException: Requested zoomRatio 1.0 is not within valid range [1.0 , 0.0] in CameraX Api in Android?
- solr - solr:在 enumField 上使用 json api 进行分面会引发错误“预期的数字字段类型”
- javascript - 添加表格列数html
- python - Python html网页抓取标题和标题