请教 Python 列表生成式 问题

L = ['Hello', 'World', 18, 'Apple', None]

print(
    [s.lower() for s in L if isinstance(s, str)]
)

以上代码是把一个list中所有的字符串变成小写
输出:['hello', 'world', 'apple']

我期待的结果是['hello', 'world', 18, 'apple', None]

也就是保留里面所有内容,请问要怎么做呢

阅读 1.2k
1 个回答

因为你加了 if isinstance(s, str) 就会把所有非字符串过滤掉了,你完全可以把条件放在前面:

[s.lower() if isinstance(s, str) else s for s in L]

多加一句,虽然 python 的 list 支持任何类型,但我个人认为,list 中的所有元素最好是同一类型

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题