0

0

怎样以快速的方式使用Python将变量插入有序数组?

WBOY

WBOY

发布时间:2023-05-09 22:49:20

|

1530人浏览过

|

来源于亿速云

转载

利用sort与sorted排序

原地修改与生成新变量

在我们学习python的过程中,列表的快速排序函数是我们的必修课。想要介绍快速插入有序数列的方法,我们首先来看两个排序函数的区别与联系。首先我们来看sort(),请看下面的代码:

import random
# 随机生成10个100以内的整数
example_list = [random.randint(1,100) for i in range(10)]
# 对他们进行排序
example_list.sort()
print(example_list)

>>> [22, 28, 35, 47, 49, 55, 68, 79, 87, 98]

要注意的是,这里的**sort()**函数并不会有任何的返回值,而是进行原地的排序,请看下面的代码:

import random
example_list = [random.randint(1,100) for i in range(10)]
example_list_sort_test = example_list.sort()
print(example_list_sort_test)

>>> None

当我们利用一个新的变量接收排序后的内容时,我们发现我们得到了None。但**sorted()**与其恰恰相反,其会新生成一个变量用来储存排序后的列表,请看下面的代码:

import random
example_list = [random.randint(1,100) for i in range(10)]
example_list_sorted_test = sorted(example_list)
print(example_list_sorted_test)

>>> [6, 14, 14, 20, 28, 50, 58, 58, 71, 83]

可以看到,我们使用**sorted()**进行排序时,生成了新的变量储存并被我们获取到了。

常用参数

当然,两个排序函数使用的参数有很多的相同的内容,我们看下面这个例子:

立即学习Python免费学习笔记(深入)”;

import random # 导入 random 模块,用于生成随机数

# 创建一个包含 10 个随机整数的列表,每个数的范围在 1 到 100 之间
example_list_argTest = [random.randint(1, 100) for i in range(10)]

# 将列表按升序排序并打印输出
example_list_argTest.sort()
print(example_list_argTest)

# 将列表按降序排序并打印输出
example_list_argTest.sort(reverse=True)
print(example_list_argTest)

# 创建一个包含三个子列表的列表
example_list_argTest_02 = [[5, 7], [1, 8], [9, 6]]
print(example_list_argTest_02)

# 对子列表按第一个元素排序并打印输出
example_list_argTest_02.sort()
print(example_list_argTest_02)

# 对子列表按第二个元素排序并打印输出
def takeSecond(test_list):
    return test_list[1]

example_list_argTest_02.sort(key=takeSecond)
print(example_list_argTest_02)

# 创建一个包含四个字符串的列表
example_list_argTest_03 = ['apple', 'big apple', 'pear', 'hen']
print(example_list_argTest_03)

# 对字符串按长度排序并打印输出
example_list_argTest_03.sort(key=len)
print(example_list_argTest_03)

>>>[4, 18, 26, 41, 43, 52, 77, 77, 97, 98]
>>>[98, 97, 77, 77, 52, 43, 41, 26, 18, 4]
>>>[[5, 7], [1, 8], [9, 6]]
>>>[[1, 8], [5, 7], [9, 6]]
>>>[[9, 6], [5, 7], [1, 8]]
>>>['apple', 'big apple', 'pear', 'hen']
>>>['hen', 'pear', 'apple', 'big apple']

其中,**sorted()**函数参数与其是相同的,下面是常用的参数值以及参数的意义:

  • key: 参数可以接受一个函数作为参数,该函数将应用于列表中的每个元素以进行排序。该函数应该接受一个参数并返回要用于排序的值。

  • reverse :一个可选参数,用于控制列表排序的顺序。当 reverse 为 True 时,列表将按降序排列;当 reverse 为 False 或未指定时(默认为 False),列表将按升序排列。

利用bisect将变量插入有序序列

获取插入元素的位置

bisect 用于在已排序的列表中插入元素,并返回插入元素后列表的索引。在其中有两个可用的函数,分别是bisect_left()bisect_right(),显然其主要区别为一个会返回插入左边的索引,一个会返回插入右边的索引。请看下面这个例子:

import bisect

example_list = [random.randint(1,100) for i in range(10)]
example_list.sort()
print(example_list)

left_index = bisect.bisect_left(example_list_sorted_test,58)
print(left_index)

right_index = bisect.bisect_right(example_list_sorted_test,58)
print(right_index)

>>>[9, 11, 16, 22, 40, 59, 60, 68, 83, 99]
>>>6
>>>8

除此之外,上述两个函数还有两个可选参数,分别如下:

易语言学习手册 十天学会易语言图解教程  pdf版
易语言学习手册 十天学会易语言图解教程 pdf版

十天学会易语言图解教程用图解的方式对易语言的使用方法和操作技巧作了生动、系统的讲解。需要的朋友们可以下载看看吧!全书分十章,分十天讲完。 第一章是介绍易语言的安装,以及运行后的界面。同时介绍一个非常简单的小程序,以帮助用户入门学习。最后介绍编程的输入方法,以及一些初学者会遇到的常见问题。第二章将接触一些具体的问题,如怎样编写一个1+2等于几的程序,并了解变量的概念,变量的有效范围,数据类型等知识。其后,您将跟着本书,编写一个自己的MP3播放器,认识窗口、按钮、编辑框三个常用组件。以认识命令及事件子程序。第

下载
  • lo 参数表示搜索范围的起始位置,可以用于指定在列表的子区间中进行搜索。

  • hi 参数表示搜索范围的结束位置,可以用于指定在列表的子区间中进行搜索。

我们可以利用上述参数来选择部分区间进行插入,请看下面这个例子:

test_list = list(range(10))
print(test_list)
# 指定区间搜索插入
bisect.bisect_left(test_list, 2, 3, 5)

>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>3

在这个例子中,我们指定了搜索的区间插入,并返回了插入的索引位置。

利用insort将元素插入有序序列

如果要将元素插入到列表中而不破坏其排序顺序,则可以使用 **insort()**函数。请看下面这个简单的例子:

import bisect

sorted_list_example = [1, 3, 4, 6, 8, 9, 11]
bisect.insort(sorted_list_example, 7)
print(sorted_list_example )

>>> [1, 3, 4, 6, 7, 8, 9, 11]

在上述例子中,我们将自定义的变量插入了有序数组中。

一个应用的例子

假设我们要对输入的成绩进行评级,其实可以用上述介绍的方法进行编写,请看下面这个例子:

def grade(score, breakpoints = [60,70,80,90], grades='FDCBA'):
    index = bisect.bisect(breakpoints, score)
    return grades[index]

random_grades = [random.randint(1,100) for i in range(10)]
print(random_grades)

print([grade(s) for s in random_grades])

>>>[27, 28, 35, 89, 20, 61, 20, 89, 53, 92]
>>>['F', 'F', 'F', 'B', 'F', 'D', 'F', 'B', 'F', 'A']

通过合理的使用上述插入序列的函数,我们完成了一个成绩评级的函数,并返回了不同成绩对应的评级。

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

61

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

164

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 6.8万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号