用 'enumerate' 解释定义列表

Defining list with 'enumerate' explanation

我遇到了这段有用的代码,returns 列表 l

的最小值的索引
[i for i, x in enumerate(l) if x == min(l)]

谁能帮我解释一下这种创建列表的方式是什么and/or这个过程是什么? 我熟悉 [i*2 for i in l] 类型代码,但我不熟悉逗号的作用以及定义新变量 x 的原因是什么。

非常感谢

enumerate 函数 returns 一个大小为 2 的元组,第一个是索引,第二个是列表中该索引处的元素。我们可以将元组分配给以下形式的多个变量:

>>> i, v = (1, 2)
>>> i
1
>>> v
2

因此在您的示例中,它遍历列表,并针对列表中的每个索引和值检查该值是否等于列表中的最小值。如果是这样,它将 i 附加到列表推导中。

当然,列表理解等于:

[l.index(min(l))]

枚举 returns 一个元组索引,列表 l 的元素,你只需告诉 python 每次将元组的第一个元素(索引)分配给 i,并将你的元素分配给 x接下来被调用。

这种创建列表的方法称为"List comprehention",而使用枚举"i, x"中的'i'表示索引号(或序列号,如果你愿意)和x表示迭代在列表中(例如在 list = [1,2,3,4] 中,每个数字都是一次迭代)

因此,当传递代码 [i for i, x in enumerate(l) if x == min(l)] 时,它将创建一个索引列表,该索引自函数 min 以来附加到它的迭代值最少() 被使用。