Python中bisect的用法

 更新时间:2014年09月23日 15:55:07   投稿:shichen2014  
这篇文章主要介绍了Python中bisect的用法,主要讲述了针对数组的插入及排序操作,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了Python中bisect的用法,是一个比较常见的实用技巧。分享给大家供大家参考。具体分析如下:

一般来说,Python中的bisect用于操作排序的数组,比如你可以在向一个数组插入数据的同时进行排序。下面的代码演示了如何进行操作:

import bisect
import random
random.seed(1)
print('New pos contents')
print('-----------------')
l=[]
 
for i in range(1,15):
  r=random.randint(1,100)
  position=bisect.bisect(l,r)
  bisect.insort(l,r)
  print '%3d %3d'%(r,position),l

输出结果为:

New pos contents
-----------------
 14  0 [14]
 85  1 [14, 85]
 77  1 [14, 77, 85]
 26  1 [14, 26, 77, 85]
 50  2 [14, 26, 50, 77, 85]
 45  2 [14, 26, 45, 50, 77, 85]
 66  4 [14, 26, 45, 50, 66, 77, 85]
 79  6 [14, 26, 45, 50, 66, 77, 79, 85]
 10  0 [10, 14, 26, 45, 50, 66, 77, 79, 85]
 3  0 [3, 10, 14, 26, 45, 50, 66, 77, 79, 85]
 84  9 [3, 10, 14, 26, 45, 50, 66, 77, 79, 84, 85]
 44  4 [3, 10, 14, 26, 44, 45, 50, 66, 77, 79, 84, 85]
 77  9 [3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]
 1  0 [1, 3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]

可以看到,在插入这些随机数的时候数组同时进行了排序。不过其中有一些重复的元素,比如上面的77,77。你可以对这些重复元素的顺序进行设置,如果希望重复的元素出现在与他相同的元素左边就是用bisect_left,否则就是用bisect_right,相应的使用insort_left和insort_right。比如下面的代码,我们可以看到出现重复的元素索引变化:

import bisect
import random
random.seed(1)
print('New pos contents')
print('-----------------')
l=[]
 
for i in range(1,15):
  r=random.randint(1,100)
  position=bisect.bisect_left(l,r)
  bisect.insort_left(l,r)
  print '%3d %3d'%(r,position),l

输出结果为:

New pos contents
-----------------
 14  0 [14]
 85  1 [14, 85]
 77  1 [14, 77, 85]
 26  1 [14, 26, 77, 85]
 50  2 [14, 26, 50, 77, 85]
 45  2 [14, 26, 45, 50, 77, 85]
 66  4 [14, 26, 45, 50, 66, 77, 85]
 79  6 [14, 26, 45, 50, 66, 77, 79, 85]
 10  0 [10, 14, 26, 45, 50, 66, 77, 79, 85]
 3  0 [3, 10, 14, 26, 45, 50, 66, 77, 79, 85]
 84  9 [3, 10, 14, 26, 45, 50, 66, 77, 79, 84, 85]
 44  4 [3, 10, 14, 26, 44, 45, 50, 66, 77, 79, 84, 85]
 77  8 [3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]
 1  0 [1, 3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]

此函数bisect.bisect(list,key) ,犹如java里的TreeMap的tailMap(fromkey)。

希望本文所述对大家的Python程序设计有所帮助。

相关文章

  • Python实现抓取页面上链接的简单爬虫分享

    Python实现抓取页面上链接的简单爬虫分享

    这篇文章主要介绍了Python实现抓取页面上链接的简单爬虫分享,本文使用了一个开源模块requests实现需求,需要的朋友可以参考下
    2015-01-01
  • Python实现给文件添加内容及得到文件信息的方法

    Python实现给文件添加内容及得到文件信息的方法

    这篇文章主要介绍了Python实现给文件添加内容及得到文件信息的方法,可实现从文件开头添加内容的功能,需要的朋友可以参考下
    2015-05-05
  • 使用 Python 处理 JSON 格式的数据

    使用 Python 处理 JSON 格式的数据

    JSON 是一个很好的选择。如果你对 Python 有所了解,就更加事半功倍了。下面就来介绍一下如何使用 Python 处理 JSON 数据。感兴趣的朋友跟随小编一起看看吧
    2019-07-07
  • 在Python中使用defaultdict初始化字典以及应用方法

    在Python中使用defaultdict初始化字典以及应用方法

    今天小编就为大家分享一篇在Python中使用defaultdict初始化字典以及应用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 基于Python实现虚假评论检测可视化系统

    基于Python实现虚假评论检测可视化系统

    这篇文章主要为大家详细介绍了如何基于Python实现一个简单的虚假评论检测可视化系统,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-04-04
  • Python内置数学函数和math模块使用指南

    Python内置数学函数和math模块使用指南

    这篇文章主要为大家介绍了Python数学函数math模块使用指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Python生成词云的实现代码

    Python生成词云的实现代码

    这篇文章主要介绍了Python生成词云,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python smtplib模块实现发送邮件带附件sendmail

    python smtplib模块实现发送邮件带附件sendmail

    这篇文章主要为大家详细介绍了python smtplib模块实现发送邮件带附件sendmail,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python3多线程操作简单示例

    Python3多线程操作简单示例

    这篇文章主要介绍了Python3多线程操作,结合实例形式分析了Python3兼容Python2使用_thread进行多线程操作的简单实现技巧,需要的朋友可以参考下
    2018-05-05
  • python遗传算法之单/多目标规划问题

    python遗传算法之单/多目标规划问题

    本文主要介绍了python遗传算法之单/多目标规划问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论