在Python中比较字符串的最简单方法是什么,忽略大小写?
当然可以做 (str1.lower() <= str2.lower()) 等,但这会创建两个额外的临时字符串(具有明显的 alloc/gc 开销)。
我想我正在寻找与 C 的 stricmp() 等效的东西。
[需要更多上下文,所以我将用一个简单的例子来演示:]
假设您要对一个冗长的字符串列表进行排序。您只需执行 List.sort()。这是 O(n * log(n)) 字符串比较并且没有内存管理(因为所有字符串和列表元素都是某种智能指针)。你很快乐。
现在,您想做同样的事情,但忽略大小写(让我们简化并假设所有字符串都是 ascii,因此可以忽略语言环境问题)。您可以执行 theList.sort(key=lambda s: s.lower()),但是每次比较都会导致两个新的分配,加上重复(降低)字符串的垃圾收集器负担。每个这样的内存管理噪音都比简单的字符串比较慢几个数量级。
现在,使用就地类似 stricmp() 的函数,您可以执行以下操作:theList.sort(cmp=stricmp),它与 theList.sort() 一样快速且内存友好。你又快乐了。
问题是任何基于 Python 的不区分大小写的比较都涉及隐式字符串重复,所以我期待找到基于 C 的比较(可能在模块字符串中)。
找不到类似的东西,因此这里的问题。(希望这可以澄清问题)。