繁体   English   中英

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

[英]Using enumerate in a list expression gives unexpected result

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

>> 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]在第二个表达式中if v < l[i + 1]删除,则按预期返回子列表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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM