首页 > 解决方案 > 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]

标签: pythonenumerate

解决方案


关于 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]

推荐阅读