yunsongblue 2021-07-30 15:23 采纳率: 100%
浏览 32
已结题

关于列表生成式 中 if 跳过操作 应该如何写?

看了廖雪峰大拿的Python教程,在列表生成式章,产生了一个疑问

想将如下列表 L1 = ['Hello', 'World', 18, 'Apple', None]
通过大写转小写,非字符串去掉 原则 转换为 L2 == ['hello', 'world', 'apple']
正常的写法应该是:L2 = [s.lower() for s in L1 if isinstance(s,str) ]

但是若想通过 for前放置if else 方式应该怎么写?

L2 = [s.lower() if isinstance(s, str) else XXXXX for s in L1]
换句话说 列表生成式 if else 不返回值应该怎么写呢?

  • 写回答

1条回答 默认 最新

  • 八云黧 2021-07-30 15:26
    关注

    1.正常写法是L2 = [s.lower() for s in L1 if isinstance(s,str)]
    2. if else 语法等价于其他语言中的三目运算符(条件预算符),本来就是按条件返回值的,你怎么让else不返回值
    如果想要这么写就必须额外处理空元素

    L2 = [s.lower() if isinstance(s,str) else None for s in L1 ]
    L2= [s for s in L2 if s ]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 已采纳回答 7月30日
  • 修改了问题 7月30日
  • 修改了问题 7月30日
  • 展开全部

悬赏问题

  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题