我正在玩列表表达式。这有效:
>> 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]
。
答案 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]