初学Python编写筛选s开头单词的列表推导式出现语法错误如何解决
问题原因
你的语法错误来自错误的列表推导式写法。Python的列表推导式有两种合法的条件写法:
- 仅筛选符合条件的元素:
[目标表达式 for 迭代变量 in 可迭代对象 if 筛选条件],此时if必须放在for从句之后,不符合条件的元素会被直接排除,不会出现在最终列表里 - 对所有元素做分支处理:
[条件满足时的表达式 if 判断条件 else 条件不满足时的表达式 for 迭代变量 in 可迭代对象],此时if-else作为完整的三元表达式,放在for从句之前,所有元素都会被处理后加入最终列表
你当前的需求是仅保留首字母为s的单词,属于第一种筛选场景,错误地将if放在了for之前,又没有对应的else分支,因此触发语法错误。
修正后的代码
st = 'Print only the words that start with s in this sentence' listst = st.split() # 原循环写法 for word in listst: if word[0] == 's': print(word) # 正确的列表推导式写法 startwiths = [word for word in listst if word[0] == 's'] print(startwiths)
运行后输出的符合要求的单词为:start、s、sentence。
补充说明
如果你的需求是将非s开头的单词替换为其他值而非直接过滤,可以使用带if-else的三元表达式写法,示例如下:
# 将非s开头的单词替换为空字符串 startwiths = [word if word[0] == 's' else '' for word in listst]
内容的提问来源于stack exchange,提问作者Elcoope
相关产品推荐
相关产品推荐

