如何用for循环检查列表项中是否包含•项目符号?
解决列表中项目符号匹配的问题
看起来你遇到的核心问题是字符编码乱码导致无法匹配到目标项目符号(•,Unicode U+2022)。你列表里的鈥�其实是编码错误生成的替换字符(U+FFFD)——这说明原本的•字符在读取/存储过程中用了错误的编码格式(比如把UTF-8文本当成GBK解码),所以变成了乱码。
下面分步骤给你解决方案:
第一步:先排查实际存在的字符
首先可以用代码确认列表元素里到底是什么字符,避免盲目匹配:
# 不要用list当变量名,会覆盖内置类型,改成my_list my_list = ['changing. 鈥�5.0 oz.', 'hello', 'dfd','df', 'changing. 鈥�5.0 oz.'] for item in my_list: print(f"当前元素: {item}") # 遍历每个字符,打印其Unicode码点 for idx, char in enumerate(item): char_code = ord(char) print(f" 位置{idx}的字符: '{char}',码点: U+{char_code:04X}")
运行后你会发现,那个乱码部分对应的是U+FFFD(替换字符),而不是你要找的U+2022。
第二步:根据实际情况选择匹配方式
方式1:直接匹配乱码的替换字符
如果你的数据源暂时无法修正,直接匹配替换字符即可:
my_list = ['changing. 鈥�5.0 oz.', 'hello', 'dfd','df', 'changing. 鈥�5.0 oz.'] for item in my_list: # 匹配替换字符U+FFFD if '\ufffd' in item: print('yay')
方式2:修正乱码后匹配正确的项目符号
如果想匹配原本的•,可以先把乱码的替换字符替换成正确的项目符号:
my_list = ['changing. 鈥�5.0 oz.', 'hello', 'dfd','df', 'changing. 鈥�5.0 oz.'] # 修正列表中的乱码 corrected_list = [item.replace('\ufffd', '\u2022') for item in my_list] for item in corrected_list: if '\u2022' in item: print('yay')
额外建议:用正则表达式匹配更灵活
如果你以后需要匹配多种项目符号(比如•、-、*等),可以用正则表达式:
import re my_list = ['changing. •5.0 oz.', 'hello', '- test', '* item', 'changing. •5.0 oz.'] # 匹配常见的项目符号 bullet_pattern = re.compile(r'[\u2022\-*]') for item in my_list: if bullet_pattern.search(item): print('yay')
内容的提问来源于stack exchange,提问作者crooose
相关产品推荐
相关产品推荐

