在Python中,忽略大小写比较字符串最简单的方法是什么?
当然,可以使用(str1.lower() <= str2.lower())等方式,但这会创建两个额外的临时字符串(伴随着明显的分配/垃圾回收开销)。
我想找到类似于C中的stricmp()的等效函数。
[有更多上下文要求,所以我将用一个简单的例子演示:]
假设您想对一长串字符串进行排序。 您只需执行theList.sort()即可。 这是O(n * log(n))字符串比较,并且没有内存管理(因为所有字符串和列表元素都是某种智能指针)。您很高兴。
现在,您想要完成相同的操作,但要忽略大小写(让我们简化并说所有字符串都是ASCII,因此可以忽略语言环境问题)。 您可以执行theList.sort(key=lambda s: s.lower()),但这样会导致每次比较产生两个新的分配,以及将重复的(小写)字符串加重垃圾回收器的负担。 每个这样的内存管理噪声比简单的字符串比较慢几个数量级。
现在,通过一个类似于stricmp()的原地函数,您可以执行:theList.sort(cmp=stricmp),它与theList.sort()一样快且内存友好。您又很高兴了。
问题在于,任何基于Python的大小写不敏感比较都会涉及隐式字符串复制,因此我希望能找到基于C的比较(也许在模块字符串中)。
没有找到类似于那样的东西,因此在这里提出了问题。 (希望这澄清了问题)。