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

Python大小写不敏感匹配代码问题:列表推导返回空列表

问题分析与解决方案

嘿,我一眼就看出问题出在哪了——你现在的代码是在遍历字符串的单个字符,但你要匹配的是用户输入的整个字符串(比如"charl"),单个字符和完整字符串当然不可能相等,所以列表推导返回空列表是必然的。

核心问题拆解

看你的代码:

self.varStr =[i for i in textString if i.lower() == x.lower()]

如果textString是从文件读出的完整文本(比如包含"Charles"的字符串),那么for i in textString会逐个取出每个字符:'C'、'h'、'a'、'r'、'l'、'e'、's'... 而用户输入的x是"charl"(长度为5的字符串),单个字符转小写后和"charl"转小写比较,结果肯定都是False,所以最终得到空列表。

针对不同需求的解决方案

根据你的需求(匹配包含输入的单词,还是完全匹配单词),这里给出两种修改方案:

方案1:匹配包含输入子串的单词(比如输入"charl"匹配"Charles")

先把文本分割成单词,再遍历每个单词检查是否包含输入的子串(大小写不敏感):

x = self.lineEditSearch.text().lower()
textString = self.ReadingFileContent(Item)
# 将文本按空白字符分割成单词列表(如果需要处理标点,可以先清理文本)
words = textString.split()
# 筛选出包含输入子串的单词
self.varStr = [word for word in words if x in word.lower()]
print(self.varStr)

方案2:完全匹配输入的单词(忽略大小写)

如果需要找和输入完全一致的单词(只是大小写不同),可以这样写:

x = self.lineEditSearch.text().lower()
textString = self.ReadingFileContent(Item)
words = textString.split()
# 比较单词转小写后和输入转小写是否相等
self.varStr = [word for word in words if word.lower() == x]
print(self.varStr)

额外情况:如果文本是按行读取的列表

如果你的ReadingFileContent返回的是每行文本组成的列表(而不是单个字符串),要找包含输入的行,可以这样修改:

x = self.lineEditSearch.text().lower()
text_lines = self.ReadingFileContent(Item)
self.varStr = [line for line in text_lines if x in line.lower()]
print(self.varStr)

总结

你只需要把遍历的对象从单个字符改成单词/行,再做大小写不敏感的比较,就能得到你想要的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:22:10