我有一个字符串列表已经按不区分大小写的顺序排序.我想在列表中插入一个新字符串.一种方法是附加项目,然后对列表进行排序,如下所示:
myList.append('Something')
myList.sort(key=lambda s: s.lower())

但我想知道是否有办法将项目插入正确的位置而不再重新整理整个事物.

我发现了这个问题:Insert an item into a sorted list in Python.它指向Python的bisect模块.但该模块看起来不像是支持不区分大小写.

编辑:我测试了这里列出的几个答案.

>将项目追加到最后并对整个列表进行排序(如原始问题中所提出的)是最慢的.
> Moinuddin Quadri的答案比排序整个列表更快,但由于在列表上的每个项目上运行lower(),它仍然很慢.
> Stefan Pochmann的回答比整个列表排序快了一个数量级.
> Jared Goguen的答案是重复插入的最快速度.但是,它第一次在每个元素上运行lower().

这是一个接听答案的接近电话.最后,我选择了Stefan Pochmann的答案,因为它是一次性插入的最佳选择,访问结果列表不需要访问成员变量.但是,用例会有所不同,因此请务必检查所有答案.

解决方法

这是再次练习二进制搜索的好机会(或者只是复制并粘贴和修改bisect.insort,这就是我所做的):
def insort_case_insensitive(a,x):
    key = x.lower()
    lo,hi = 0,len(myList)
    while lo < hi:
        mid = (lo + hi) // 2
        if key < a[mid].lower():
            hi = mid
        else:
            lo = mid + 1
    a.insert(lo,x)

演示:

myList = ['a','b','c','d','e']
for x in 'A','B','C','D','E':
    insort_case_insensitive(myList,x)
print myList

打印:

['a','A','e','E']

它是O(n),就像追加排序一样,但只是因为最后的a.insert(lo,x).这很简单,用C语言完成,所以速度非常快.二进制搜索当然只需要O(log n)步,因此也非常快.追加排序方式会在所有元素上调用.lower()并对它们进行比较,两者都要慢得多.由于在所有元素上调用.lower(),@ MoinuddinQuadri的第一个解决方案也慢得多.

请参阅我的其他答案进行基准比较.

在Python中将项插入到不区分大小写的排序列表中的更多相关文章

  1. ios – NSDictionary的不区分大小写的键

    我试图在NSDictionary上使用对于JSON响应的incase敏感案例,因为有时我的响应键类型会有所不同,有些是驼峰式,有些是小写或其他混合组合.是否有任何内置功能可以检查此案例的灵敏度情况?

  2. ios – 不区分大小写的字符串搜索 – iphone

    我正在寻找一种在Objective-C中的另一个字符串中执行不区分大小写的字符串搜索的方法.我可以找到搜索区分大小写的字符串的方法,并比较不敏感的案例,但不搜索不区分大小写.我想执行的搜索示例:“john”within“itoldJOHNtofindmeagoodsearchalgorithm““badIDEA”within“IthinkitsareallybaDideatopostthisque

  3. swift 实现随机验证码,不区分大小写进行验证

    效果如下,下载地址:上传太慢,改天吧。。验证码效果的实现代码不区分大小写验证的代码实现

  4. Swift3.0语言教程比较、判断字符串

    Swift3.0语言教程比较、判断字符串Swift3.0语言教程比较、判断字符串,在一个程序中字符串很多时,常常会做的操作就是对这些字符串进行比较和判断。在Nsstring中使用caseInsensitiveCompare(_:)方法实现这一功能,其语法形式如下:funccaseInsensitiveCompare->ComparisonResult其中,string用来指定一个比较的字符串。importFoundationvara=Nsstringvarb=Nsstringprint//比较字符串运行结

  5. Swift3.0语言教程字符串大小写转化

    Swift3.0语言教程字符串大小写转化Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等。在Nsstring中提供了3种字符串大小写转换方式,分别为转换字符串大小写、转换字符串大小写,并实现本地化以及转换字符串大小写,并设置语言环境。其语法形式如下:varlocalizedUppercase:String{get}以下将字符串的的全部字母转换为大写,并实现本地化。

  6. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  7. 如何用swift识别字符串中的大小写字符?

    我知道我可以从swift调用C函数,但是对我来说似乎不正确。我该怎么做才能做到这一点呢?您可以随时查看小写表示与当前值的不同;

  8. 不是Android File.exists()区分大小写?

    我已经创建了一个新的文件夹“sdcard/dd”:而且,我创建第二个文件夹“sdcard/DD”由相同的代码,但是,这次album.exists()返回true,这表示“dd”是等于“DD”.任何人都知道为什么File.exists()不能检查文件夹名称的大小写?解决方法虽然Linux,因此也是Android,通常在文件名时是区分大小写的,通常在SD卡,记忆棒等上使用的FAT文件系统是不区分大小写的.因此,当它处理这些文件系统上的文件时,Android将不会区分这些情况.因此,如果您有两个文件,/sdca

  9. 使用Java实现大小写转换实例代码

    最近在开发项目中遇到一个比较好用的方法,那就是对字符串中的字母大小进行转换,所以下面这篇文章主要给大家介绍了关于如何使用Java实现大小写转换的相关资料,需要的朋友可以参考下

  10. Laravel模糊查询区分大小写的实例

    今天小编就为大家分享一篇Laravel模糊查询区分大小写的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部