如何为带enumerate的Python列表推导式添加else语句?
在带enumerate的列表推导式中使用if-else的正确方式
先明确两种列表推导式的核心区别:
- 筛选型:
[元素 for 变量 in 可迭代对象 if 条件]—— 只保留符合条件的元素,不符合的直接跳过 - 条件生成型:
[条件表达式 for 变量 in 可迭代对象]—— 每个迭代都会生成元素,根据条件表达式决定具体值
你之前的带enumerate的推导式属于筛选型,想要添加else逻辑,需要改成条件生成型,把if-else移到元素生成的位置,而非for循环之后。
基础用法回顾
先看普通列表推导式的if-else示例:
a = [1, 0, 1, 0, 1, 0, 1, 0, 1] b = [i-1 if i > 0 else i+1 for i in a] print(b) # 输出: [0, 1, 0, 1, 0, 1, 0, 1, 0]
带enumerate的筛选型推导式(仅保留符合条件的索引):
c = [j for j, item in enumerate(b) if item > 0] print(c) # 输出: [1, 3, 5, 7]
添加else的正确写法
如果要实现“当item>0时取索引j,否则返回指定值”,只需把if-else放在列表推导式最前端的元素生成位置:
# 示例:item>0时取j,否则返回-1 c = [j if item > 0 else -1 for j, item in enumerate(b)] print(c) # 输出: [-1, 1, -1, 3, -1, 5, -1, 7, -1]
你可以根据需求替换else后的内容,比如返回None或自定义标记:
# else时返回None c = [j if item > 0 else None for j, item in enumerate(b)] print(c) # 输出: [None, 1, None, 3, None, 5, None, 7, None]
内容的提问来源于stack exchange,提问作者sruli
相关产品推荐
相关产品推荐

