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

如何使用zip、length和列表生成式实现查找字符串中指定字符所有出现位置的功能

实现方案

直接给出符合要求的代码如下:

search :: String -> Char -> [Int]
search str target = [idx | (idx, char) <- zip [0..] str, char == target]

逻辑说明

  1. 这里利用了zip函数的特性:当两个输入列表长度不一致时,会在较短的列表遍历完成后自动终止,所以直接用无限列表[0..]和输入字符串做合并,就能得到「索引-对应字符」的二元组列表,不需要手动计算字符串长度来生成索引区间。如果你需要显式结合length和[m..n]语法实现,等价写法为:
    search str target = [idx | (idx, char) <- zip [0 .. length str - 1] str, char == target]
    
  2. 列表推导式中你只需要在结果部分输出二元组的第一个元素(也就是索引),完全不需要保留字符相关的内容,符合你说的「省略字符串相关部分」的思路。
  3. 不需要开启并行列表推导扩展,普通列表推导配合zip就能实现需求,兼容性更强。

效果验证

你给出的测试用例可以完全匹配:

  • search "Bookshop" 'o' 输出[1,2,6]
  • search "senselessness" 's' 输出[0,3,7,8,11,12]

内容的提问来源于stack exchange,提问作者idontknowhowtocode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:27:02