如何在Python中进行不区分大小写的字符串比较?
我想以一种非常简单和Pythonic的方式将常规字符串的比较封装到存储库字符串中.我还希望能够使用常规python字符串在字符串中查找值.
在Python中比较字符串的最简单方法是什么,忽略大小写?
当然可以做(str1.lower()<= str2.lower())等,但是这创建了两个额外的临时字符串(具有明显的alloc/gc开销).
我想我正在寻找相当于C的stricmp().
[请求更多上下文,所以我将用一个简单的例子来证明:]
假设您要对looong字符串列表进行排序.你只需要做List.sort().这是O(n*log(n))字符串比较,没有内存管理(因为所有字符串和列表元素都是某种智能指针).你很快乐.
现在,您想要做同样的事情,但忽略这种情况(让我们简化并说所有字符串都是ascii,因此可以忽略区域设置问题).您可以执行List.sort(key = lambda s:s.lower()),但是每次比较会导致两个新的分配,加上垃圾收集器与重复(降低)字符串的负担.每个这样的存储器管理噪声比简单的字符串比较慢几个数量级.
现在,使用就地stricmp()函数,你可以:theList.sort(cmp = stricmp),它与theList.sort()一样快和内存友好.你又开心了.
问题是任何基于Python的不区分大小写的比较涉及隐式字符串重复,所以我期望找到基于C的比较(可能在模块字符串中).
找不到那样的东西,因此问题就在这里.(希望这澄清了这个问题).
这是我正在学习的示例代码.我想取一个字符串(1个或多个字符)并将其与现有字符串进行比较.我想输入蓝色仍然得到答案.怎么完全忽略这个案子?谢谢.
parrot = "Norwegian Blue"
letter = input("Enter a character: ")
if letter in parrot:
print("The letter {0} is in the Norwegian Blue".format(letter))
else:
print("Sorry the letter is missing ")
Run Code Online (Sandbox Code Playgroud)
成功案例:
C:\PythonMasterClass>python IfProgramFlow.py
Enter a character: Blue
The letter Blue is in the Norwegian Blue
Run Code Online (Sandbox Code Playgroud)
对于失败的案件:
C:\PythonMasterClass>python IfProgramFlow.py
Enter a character: blue
Sorry the letter is missing
Run Code Online (Sandbox Code Playgroud)
我检查了其他线程将我的输入和实际文本转换为小写并进行比较,但我想要一个直接的方法.如果我有多个字符串,我不想为了这个目的将它们全部保存在小写字母中.谢谢.