Python枚举

2024-05-23 22:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

下面列出了一个代码,它接受一个列表,然后返回一个新的列表,并且每秒删除一个值

有人能给我解释一下这个代码是怎么工作的吗?我知道枚举函数将把列表放入元组列表中。示例:[1,2,3,4,5]将转到(0,1)(1,2)(2,3)(3,4)(4,5)

问题1:在代码中,为什么“val”在return语句中列在for循环之前,然后在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]

Tags: 函数代码示例列表forreturndefval
2条回答

这不是一个“for”循环,这是一个列表理解语法[val for i,val in enumerate(lst)]将逐元组检查enumerate(lst)生成的内容,并将val-s放入一个新列表中。都是。因此,这将简单地重新创建相同的列表。添加条件[val for i,val in enumerate(lst) if i % 2 == 0]将使它只接受条件为真的值,因此只接受索引可除以2的值。正如其他人已经提到的,阅读关于列表理解的内容将非常有帮助

也就是说,你可以用更简单的方式做同样的事情。具体来说,就是lst[::2]

关于Q1,这只是一个list comprehension syntax。 在函数中,它创建并返回一个列表。 它可以重写为常规for循环,例如

def remove_every_other(lst):
    result = []
    for i, val in enumerate(lst):
        if i % 2 == 0:
            result.append(val)
    return result

在Python中,列表理解是做同样事情的更自然的方式。
答覆第二季及;第三个问题是“是”和“是”

我认为如果它看起来像这样,函数会更容易理解

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]

相关问题 更多 >