You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列车空闲车厢查找函数的列表推导式及末尾语法疑问

列表推导式收集索引i的逻辑

首先代码里的a = n // len(lst)是先计算单节车厢的最大载客量:总载客量n除以车厢总数len(lst)取整,就是均分后每节车厢的容量上限。
后面的列表推导式[i for i, j in enumerate(lst) if j / a <= 0.5]逻辑如下:

  • 用enumerate(lst)同时遍历车厢列表的索引(赋值给i)和对应车厢的当前载客数(赋值给j)
  • 用j / a <= 0.5判断当前车厢的载客占比是否不超过容量的50%
  • 只要满足判断条件,就把当前车厢的索引i加入结果列表,遍历顺序是从左到右,所以结果列表里的索引是按车厢顺序从小到大排列的,第一个元素就是首个符合要求的车厢索引。

+[-1]][0][0]部分的作用

我们分步骤拆解这段语法:

  1. +[-1]的作用:给前面列表推导式生成的结果列表拼接固定值-1
    • 如果存在符合要求的车厢,列表推导式的结果是类似[2,3,4]的非空列表,拼接后变成[2,3,4,-1]
    • 如果不存在符合要求的车厢,列表推导式的结果是空列表[],拼接后变成[-1]
  2. 外层[]加[0]的作用:这是一段冗余写法,[[xxx]][0]等价于直接取xxx本身,完全可以省略
  3. 末尾[0]的作用:取拼接后列表的第一个元素
    • 有符合要求的车厢时,拿到的就是首个符合要求的车厢索引
    • 没有符合要求的车厢时,拿到的就是提前拼接的-1,刚好满足需求中不存在就返回-1的要求

补充优化提示:原代码这里的写法可以简化,去掉冗余的外层括号,直接写成 return ([i for i, j in enumerate(lst) if j / a <= 0.5] + [-1])[0] 就能实现完全相同的效果。

内容的提问来源于stack exchange,提问作者Serp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:18:02