当前位置: 首页 > 面试题库 >

忽略Python字符串中的大小写

尉迟雅昶
2023-03-14
问题内容

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

当然可以做到(str1.lower()<= str2.lower())等,但这会创建两个附加的临时字符串(明显的alloc / gc开销)。

我想我正在寻找一个等效于C的stricmp()。

[请求更多上下文,所以我将用一个简单的示例进行演示:]

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

现在,您想做同样的事情,但是忽略大小写(让我们简化并说所有字符串都是ascii,因此可以忽略语言环境问题)。您可以执行List.sort(key =
lambda
s:s.lower()),但随后每次比较会导致两个新分配,并给重复的(降低的)字符串增加垃圾收集器的负担。每个这样的内存管理噪声都比简单的字符串比较慢几个数量级。

现在,使用类似stricmp()的函数进行操作:theList.sort(cmp =
stricmp),它与List.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代码-食谱194371:不
区分大小写的字符串是用于创建不区分大小写的字符串类的食谱。快速执行某些操作可能会导致终止,但是如果您打算经常使用它们,可以为您提供一种处理不区分大小写的字符串的通用方法。



 类似资料:
  • 问题内容: 是否可以确定String是否包含字符串模式?我想知道当字符不区分大小写时是否有可能。如果是这样,怎么办? 问题答案: 您可以使用 检查CharSequence是否包含搜索CharSequence(不区分大小写),处理为null。不区分大小写由String.equalsIgnoreCase(String)定义。 空的CharSequence将返回false。 这将比regex更好,因为

  • 我试图从图像URL字符串中删除大小规范,但似乎找不到解决方案。我不太了解正则表达式,所以我尝试了<code>[0-9x],但它只删除了url中的所有数字,而不仅仅是维度子字符串。我只想去掉像<code>110x61</code>这样的部分。 我想将我的字符串转换为: 对此: 我使用RegexPlanet来测试模式,但我提出的方法都不起作用……什么正则表达式可以解决我的问题?任何帮助都将不胜感激。删

  • 问题 你需要以忽略大小写的方式搜索与替换文本字符串 解决方案 为了在文本操作时忽略大小写,你需要在使用 re 模块的时候给这些操作提供 re.IGNORECASE 标志参数。比如: >>> text = 'UPPER PYTHON, lower python, Mixed Python' >>> re.findall('python', text, flags=re.IGNORECASE) ['P

  • 问题内容: 我有一个列表,其中包含代表动物名称的字符串。我需要对列表进行排序。如果使用,它将首先使用大写字符串然后使用小写形式提供列表输出。 但是我需要下面的输出。 输入: 输出: 问题答案: 该方法和功能迈出了关键的参数: 为每个值调用名为in的函数,并在排序时使用返回值,而不会影响实际值: 要在之前进行排序,您必须在键中包含更多信息,以便以给定的顺序对相等的值进行排序: 为和为生成更复杂的密钥

  • 本文向大家介绍python实现忽略大小写对字符串列表排序的方法,包括了python实现忽略大小写对字符串列表排序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现忽略大小写对字符串列表排序的方法,是非常实用的技巧。分享给大家供大家参考。具体分析如下: 先来看看如下代码: 结果: 另一种方法: 使用内建函数 sorted(iterable[,cmp[, key[,reve

  • 问题内容: 我有两个,和。如何忽略大小写检查是否包含在其中? 问题答案: