为何提取输入字符串中数字的列表推导式无法正常工作?
搞定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
相关产品推荐
相关产品推荐

