如何遍历列表中每个字符串并修改?Python字符过滤代码无效果如何修复?
问题根源
excepted_chars定义格式错误:你把所有要过滤的字符放在了一个列表的单个字符串元素中,执行char in excepted_chars判断时,实际是对比单个字符是否等于这个长度为几十的长字符串,判断结果永远为False,所以过滤逻辑全程没有生效。- 遍历判断逻辑冗余且存在隐患:你已经遍历到字符串中的单个字符
e,不需要再套any(char in excepted_chars for char in e)的冗余判断;同时使用nums.index(i)定位元素的方式存在漏洞,当列表有重复元素时会匹配到错误的位置。 - 可选注意点:如果你的需求是保留数字和分隔符,不需要把
-也加入过滤列表,可以自行调整过滤字符范围,避免有用符号被误删。
修复代码
提供更简洁高效的实现方式:
nums = ['-634-2385 BI', '-638-9255 Br', '.789-2936 Br', '785-2141 Br', '785-7424 Br', '634-8122 Bri', '783-2642 Br', '783-2012 !', '634-2060 Br'] # 直接定义为要过滤的字符组成的字符串,不需要套外层列表,按需加入空格过滤 excepted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabdefghijklmnopqrstuvwxyz_!?.' # 遍历过滤得到新列表 cleaned_nums = [] for s in nums: # 仅保留不在过滤范围内的字符 new_s = ''.join([c for c in s if c not in excepted_chars]) cleaned_nums.append(new_s) print(cleaned_nums)
运行结果
如果保留-符号,输出为:
['-634-2385 ', '-638-9255 ', '789-2936 ', '785-2141 ', '785-7424 ', '634-8122 ', '783-2642 ', '783-2012 ', '634-2060 ']
如果需要删除-和多余空格,只要把-和空格加入excepted_chars即可,输出为:
['6342385', '6389255', '7892936', '7852141', '7857424', '6348122', '7832642', '7832012', '6342060']
内容的提问来源于stack exchange,提问作者user17616004
相关产品推荐
相关产品推荐

