如何在全为字符串的Python列表中查找包含0-9数字的元素
解决方案
原有代码问题排查
- 变量名冲突:你用
list作为列表变量名,list是Python内置的关键字,后续操作会触发未知错误 - 变量不匹配:你定义的列表名是
list,但循环时遍历的是未定义的home_pitchers变量,直接运行会报错 - 多余无效代码:
print(ex)中的ex变量未定义,运行会报错 - 匹配规则固定:你把匹配值写死为
'8',只能匹配包含8的元素,无法匹配其他数字
无正则简单实现(最适合新手)
不需要用到复杂的正则规则,用Python自带的字符串判断方法就能实现:
# 定义原始列表,替换掉和关键字冲突的变量名 name_list = ['Alvarez, S', 'Crawford, B', 'Fury, 8', 'Mayweather, F', 'Lopez, 44'] # 遍历列表里的每个字符串元素 for s in name_list: # 只要当前字符串里有任意一个字符是数字,就返回True has_number = any(char.isdigit() for char in s) if has_number: print(s)
代码说明
char.isdigit()是Python字符串自带的方法,会判断单个字符是不是0-9的数字;any()函数的作用是只要遍历到任意一个满足条件的字符,就立刻返回True,不需要遍历完整个字符串,效率很高。
运行后输出结果完全符合你的要求:
Fury, 8 Lopez, 44
正则实现方案
如果你想尝试用正则实现,你之前写的[^0-9]规则是错误的:中括号里的^代表取反,这段规则匹配的是非数字的字符,所以不会生效。你只需要把^去掉,匹配[0-9]即可:
# 导入Python内置的正则库 import re name_list = ['Alvarez, S', 'Crawford, B', 'Fury, 8', 'Mayweather, F', 'Lopez, 44'] for s in name_list: # 检查字符串中是否存在0-9的数字 if re.search(r'[0-9]', s): print(s)
内容的提问来源于stack exchange,提问作者SMcN89
相关产品推荐
相关产品推荐

