【发布时间】:2010-09-08 22:05:00
【问题描述】:
在 Python 中忽略大小写比较字符串的最简单方法是什么?
当然可以执行 (str1.lower()
我想我正在寻找与 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 的比较(可能在模块字符串中)。
找不到类似的东西,因此这里的问题。 (希望这可以澄清问题)。
【问题讨论】:
-
PHP 等效项:strcasecmp - nl3.php.net/strcasecmp
-
你的假设是错误的。 list.sort() with a key= not 表示“每次比较两个新分配”。 (另一方面,使用 cmp= 的 list.sort 确实调用每个比较的参数)
-
尝试将问题从
Ignore case in python strings重命名为What's closest to stricmp in Python for 7-bit ascii string comparison?以更准确地反映操作员的实际问题。主要问题:unicode 也是“字符串”,但这个问题会让他们 totally 出错;见 tchrist 的 cmets
标签: python string case-insensitive