在列表表达式中使用枚举会产生意外结果

时间:2016-10-27 09:13:18

标签: python list

我正在玩列表表达式。这有效:

>> l = [1, 4, 3, 4, 5]
>> z = [v for i, v in enumerate(l[0:-1]) if v < l[i + 1]]
>> print(z)
[1, 3, 4]

但这不是:

>> l = [1, 4, 3, 4, 5]
>> z = [v for i, v in enumerate(l[1:-1]) if v < l[i + 1]] # Changed from l[0:-1] -> l[1:-1]
>> print(z)
[] # It should print [3, 4]

他们看起来几乎相同 - 我错过了什么?删除第二个表达式中的if v < l[i + 1]会按预期返回子列表l[1:-1]

1 个答案:

答案 0 :(得分:3)

enumerate()每次都会在0开始计算。您在开始时将l缩短了一个元素,但i计数器不会从1开始,它仍然从0开始。

将起始值作为第二个参数传递:

>>> [v for i, v in enumerate(l[1:-1], 1) if v < l[i + 1]]
[3, 4]