如何用一行代码(map/filter/zip等)实现正则匹配跨列表筛选元素
一行代码实现正则匹配筛选对应列表元素
嘿,这就帮你把代码改成更优雅的一行版本!核心思路是用zip把两个列表的对应元素配对,再通过列表推导式完成筛选,既简洁又易读:
import re form_win = ['2/5','1/4','3/2','4/1','5/8','1/3','7/10','8/6'] form_chr = ['a','b','c','d','e','f','g','h'] # 一行实现筛选逻辑 b = [char for win_str, char in zip(form_win, form_chr) if re.match(r'^1/', win_str)] print('uglyst:', b) # 输出: uglyst: ['b', 'f']
为什么这么改?
- 用
zip(form_win, form_chr)直接把每个赔率字符串和对应的字符配对,避免了原代码里用enumerate取索引再查form_chr的繁琐操作。 - 列表推导式把循环、条件判断和结果收集合并成一行,逻辑清晰且符合Pythonic的风格。
- 原代码里的
b.extend(form_chr[cnt])其实等价于b.append(form_chr[cnt])(因为单个字符是长度为1的可迭代对象),列表推导式直接收集字符就完成了相同的效果。
如果你不想用正则,其实还可以用字符串的startswith方法进一步简化(性能也更好),一行代码可以改成:
b = [char for win_str, char in zip(form_win, form_chr) if win_str.startswith('1/')]
这个版本不需要导入re模块,对于固定前缀的匹配场景更高效~
内容的提问来源于stack exchange,提问作者Atirra
相关产品推荐
相关产品推荐

