python教程—忽略Python字符串中的大小写[复制]-Python实用宝典

python教程—忽略Python字符串中的大小写[复制]

这个问题已经有了答案:在Python中,忽略大小写比较字符串的最简单方法是什么?

在Python中,忽略大小写比较字符串最简单的方法是什么?

当然可以这样做(str1.lower() < = str2.lower()),等等,但是这会创建两个额外的临时字符串(带有明显的alloc/g-c开销)。

我想我在寻找一个等价于C的stricmp()的函数。

[需要更多上下文,所以我将用一个简单的例子来演示:]

假设您想对一长串字符串进行排序。只需执行elist .sort()。
这是O(n * log(n))字符串比较,没有内存管理(因为所有
字符串和列表元素是某种智能指针)。你是快乐的。

现在,你想做同样的事情,但是忽略这种情况(让我们化简一下
所有字符串都是ascii,因此可以忽略区域设置问题)。
你可以做这个。排序(key=lambda s: s.lower()),然后生成两个new
每次比较的分配,加上重复的垃圾收集器负担
(降低)字符串。
每一个这样的内存管理噪声都比简单的字符串比较慢几个数量级。

现在,使用一个与stricmp()类似的函数,您可以这样做:theList.sort(cmp=stricmp)
它和elist .sort()一样快,并且对内存友好。你又高兴了。

问题是任何基于python的不区分大小写的比较都涉及隐式字符串
复制,所以我希望找到一个基于c的比较(可能在模块字符串中)。

找不到这样的东西,所以这里有个问题。
(希望这能澄清这个问题)。

回答

针对你的澄清…

您可以使用ctypes来执行c函数"strcasecmp"。Ctypes包含在Python 2.5中。它提供了调用dll和共享(如libc)的能力。下面是一个简单的例子(Linux上的Python;参见Win32帮助链接):

    from ctypes import * libc = CDLL("libc.so.6") // see link above for Win32 help libc.strcasecmp("THIS", "this") // returns 0 libc.strcasecmp("THIS", "THAT") // returns 8

可能还想引用strcasecmp文档

不确定这是更快还是更慢(尚未测试),但这是使用C函数进行区分大小写字符串比较的一种方法。

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

ActiveState Code - Recipe 194371:区分大小写的字符串
是创建不区分大小写的字符串类的方法。对于一些快速的东西来说,这可能有点过分,但是如果您打算经常使用它们,它可以为您提供一种处理大小写不敏感字符串的通用方法。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论