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

为何提取输入字符串中数字的列表推导式无法正常工作?

搞定Python列表推导式的小问题

嘿,作为Python新手刚接触推导式踩点小坑太正常啦!我来帮你梳理下问题出在哪,再给你正确的写法~

首先看你写的推导式:

digit = [d for i in range(len(sent)) if sent[i].isdigit() = d]

这里有两个明显的语法问题:

  • 条件部分不能写赋值语句= d,条件需要是一个能返回True/False的布尔表达式;
  • 列表推导式的结构是**[要生成的元素 for 循环变量 in 可迭代对象 if 过滤条件]**,你把要生成的元素(也就是sent[i])的位置搞错啦。

对应原循环的正确推导式

如果你想完全对应原来的循环逻辑(通过索引遍历),正确的写法应该是:

sent = input('Enter a string')
digit = [sent[i] for i in range(len(sent)) if sent[i].isdigit()]

这里把你原来循环里digit.append(d)的d(也就是sent[i])放在推导式的最前面,后面跟上循环和过滤条件,就和原循环的逻辑完全一致了。

更简洁的优化写法

其实Python里遍历字符串根本不需要用索引,直接遍历每个字符就好,这样推导式会更简洁易读:

sent = input('Enter a string')
digit = [char for char in sent if char.isdigit()]

这个写法和原循环的功能完全一样,而且更符合Python的“优雅”风格~

你可以试试这两种写法,应该就能得到和原循环一样的结果啦!

内容的提问来源于stack exchange,提问作者Santosh Kumar L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:27:21