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

Python 在列表表达式中使用枚举会产生意外结果,python,list,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代表i,v在枚举(l[0:-1])中,如果v>打印(z) [1, 3, 4] 但这并不是: >> l = [1, 4, 3, 4, 5] >> z =

我在玩列表表达式。这项工作:

>> 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代表i,v在枚举(l[0:-1])中,如果v>打印(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]
>l=[1,4,3,4,5]
>>z=[v代表i,枚举中的v(l[1:-1]),如果vl[1:-1]更改
>>打印(z)
[]它应该打印[3,4]
它们看起来几乎一模一样——我遗漏了什么?在第二个表达式中删除
如果v
将按预期返回子列表
l[1:-1]

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

传入一个起始值作为第二个参数:

>>> [v for i, v in enumerate(l[1:-1], 1) if v < l[i + 1]]
[3, 4]
>>[v代表i,v在枚举中(l[1:-1],1)如果v
enumerate()
每次从
0
开始计数。您在开头将
l
缩短了一个元素,但是
i
计数器不是从
1
开始的,它仍然从
0
开始

传入一个起始值作为第二个参数:

>>> [v for i, v in enumerate(l[1:-1], 1) if v < l[i + 1]]
[3, 4]
>>[v代表i,v在枚举中(l[1:-1],1)如果v
哇,事后看来这很明显。哇,事后看来这很明显。