Python | 根据子列表中的第二个元素对列表进行排序
在本文中,我们将学习如何根据主列表中存在的子列表的第二个元素对任何列表进行排序。
比如
Input : [[‘rishav’, 10], [‘akash’, 5], [‘ram’, 20], [‘gaurav’, 15]]
Output : [[‘akash’, 5], [‘rishav’, 10], [‘gaurav’, 15], [‘ram’, 20]]Input : [[‘452’, 10], [‘256’, 5], [‘100’, 20], [‘135’, 15]]
Output : [[‘256’, 5], [‘452’, 10], [‘135’, 15], [‘100’, 20]]
方法1:使用冒泡排序
这里我们使用了冒泡排序来执行排序。尝试使用嵌套循环访问子列表的第二个元素,这将执行就地排序方法。时间复杂度类似于冒泡排序,即,时间复杂度为O(n^2)。
def Sort(sub_li):l = len(sub_li)for i in range(0, l):for j in range(0, l-i-1):if (sub_li[j][1] > sub_li[j + 1][1]):tempo = sub_li[j]sub_li[j] = sub_li[j + 1]sub_li[j + 1] = temporeturn sub_li# Input list
sub_li = [['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]# Printing the list
print(Sort(sub_li))
输出
[['akash', 5], ['rishav', 10], ['gaurav', 15], ['ram', 20]]
方法2:使用sort()方法
当通过该方法排序时,元组的实际内容被改变,并且就像前面的方法一样,执行就地排序。
def Sort(sub_li):# reverse = None (Sorts in Ascending order)# key is set to sort using second element of# sublist lambda has been usedsub_li.sort(key = lambda x: x[1])return sub_li# Input list
sub_li =[['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]# Printing the sub list
print(Sort(sub_li))
输出
[['akash', 5], ['rishav', 10], ['gaurav', 15], ['ram', 20]]
时间复杂度:O(n*logn)
方法3:使用sorted()方法进行
sorted()对列表进行排序,并始终返回一个包含元素的列表,而不修改原始序列。
def Sort(sub_li):# reverse = None (Sorts in Ascending order)# key is set to sort using second element of# sublist lambda has been usedreturn (sorted(sub_li, key=lambda x: x[1]))# Input list
sub_li = [['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]# Printing resultant list
print(Sort(sub_li))
输出
[['akash', 5], ['rishav', 10], ['gaurav', 15], ['ram', 20]]
方法4: 使用OrderedDict
from collections import OrderedDictdef Sort(sub_li):# create an ordered dictionarysub_li_dict = OrderedDict()for i in sub_li:sub_li_dict[i[1]] = i# sorting the dictionary by keysorted_dict = sorted(sub_li_dict.items())# extracting the values from the sorted dictionarysort_sub_li = [value for key, value in sorted_dict]return sort_sub_li# Driver Code
sub_li =[['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]
print(Sort(sub_li))
输出
[['akash', 5], ['rishav', 10], ['gaurav', 15], ['ram', 20]]
上述方法实现了将子列表元素存储为键值对的有序字典。然后,字典按键排序,并返回列表,其中元素根据子列表中的第二个元素排序。
方法5: 使用operator模块中的itemgetter()
from operator import itemgetterdef sort_tuples(sub_li):# itemgetter(1) returns a function that can be used to retrieve the# second element of a tuple (i.e., the element at index 1)# this function is used as the key for sorting the sublistsreturn sorted(sub_li, key=itemgetter(1))# Input list
sub_li = [['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]# Printing resultant list
print(sort_tuples(sub_li))
输出
[['akash', 5], ['rishav', 10], ['gaurav', 15], ['ram', 20]]
方法6: 使用numpy的argsort()
import numpy as np# Define the input list
sub_li = [['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]# Converting the list to a NumPy array
sub_arr = np.array(sub_li)# Extracting the second column and convert it to integers
values = sub_arr[:, 1].astype(int)# Sort the array by the second column (index 1)
sorted_arr = sub_arr[values.argsort()]# Converting the sorted array back to a list
sorted_li = sorted_arr.tolist()# Printing sorted list
print(sorted_li)
输出
[['akash', '5'], ['rishav', '10'], ['gaurav', '15'], ['ram', '20']]
方法7: 使用递归
- 定义一个
merge()
函数,它接收两个列表(left
和right
),并将它们合并,同时根据子列表的第二个元素进行排序。 - 在
merge()
函数中,初始化一个空列表result
来存储合并后的和排序后的子列表。 - 将两个指针
i
和j
初始化为0,分别表示left
和right
中的当前索引。 - 比较子列表中
left[i]
和right[j]
的第二个元素。 - 如果
left[i]
的第二个元素小于或等于right[j]
的第二个元素,则将left[i]
追加到result
并递增i
。 - 否则,将
right[j]
追加到result
并递增j
。 - 重复步骤4-6,直到
left
或right
用尽为止。 - 将
left
和right
中的剩余元素附加到result
(如果有的话)。 - 返回
result
作为合并和排序的列表。
def merge(left, right):# Empty list to store merge and sorted listresult = []i = 0j = 0while i < len(left) and j < len(right):if left[i][1] <= right[j][1]:result.append(left[i])i += 1else:result.append(right[j])j += 1result.extend(left[i:])result.extend(right[j:])return result# Recursive function to sort sub list
def sort_recursive(sub_li):if len(sub_li) <= 1:return sub_limid = len(sub_li) // 2left = sub_li[:mid]right = sub_li[mid:]left = sort_recursive(left)right = sort_recursive(right)return merge(left, right)# Input sub list
sub_li = [['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]# Calling function and printing sub list
print(sort_recursive(sub_li))
输出
[['akash', 5], ['rishav', 10], ['gaurav', 15], ['ram', 20]]
这个算法的时间复杂度是O(n log n),其中n是输入列表sub_li
的长度。这是因为列表被递归地分成两半,直到达到单个元素或空列表的基本情况,然后在排序时合并回递归树,取log n级。在每个级别上,合并操作需要时间O(n)。
相关文章:
Python | 根据子列表中的第二个元素对列表进行排序
在本文中,我们将学习如何根据主列表中存在的子列表的第二个元素对任何列表进行排序。 比如 Input : [[‘rishav’, 10], [‘akash’, 5], [‘ram’, 20], [‘gaurav’, 15]] Output : [[‘akash’, 5], [‘rishav’, 10], [‘gaurav’, 15], [‘ram’, 20]] Input …...
qsort函数详细讲解以及利用冒泡排序模拟实现qsort函数
个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.qsort函数 1.1qsort函数的参数 …...
C++QT day6
1> 将之前定义的栈类和队列类都实现成模板类 栈: #include <iostream> #define MAX 128 using namespace std; template<typename T> class Stack_s { private:T *pnew T[MAX];//栈的数组int top;//记录栈顶的变量 public://构造函数Stack_s(int t…...
List与ArrayList
目录 一、List及其使用 1.1 List的概念 1.2 常见接口的介绍 1.3 List的使用 二、线性表和顺序表 2.1 线性表 2.2 顺序表 三、ArrayList介绍 四、ArrayList的使用 4.1 ArrayList构造 4.2 ArrayList的常用方法 4.3 ArrayList的遍历 4.4 ArrayList的扩容机制 五、ArrayList的具…...
【C++】特殊类的设计
文章目录 1. 设计一个类, 不能被拷贝2. 设计一个类, 不能被继承3. 设计一个类, 只能在堆上创建对象3. 设计一个类, 只能在栈上创建对象4. 创建一个类, 只能创建一个对象(单例模式)饿汉模式懒汉模式 1. 设计一个类, 不能被拷贝 💕 C98方式: 在C11之前&a…...
机器学习:PCA(Principal Component Analysis主成分)降维
参考:PCA降维原理 操作步骤与优缺点_TranSad的博客-CSDN博客 PCA降维算法_偶尔努力翻身的咸鱼的博客-CSDN博客 需要提前了解的数学知识: 一、PCA的主要思想 PCA,即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想…...
linux服务器slab缓存回收方案设计
背景 自己写的回收slab内存ko,insmod报错“shrink_slab:unknown symbol _x86_indirect_thunk_rax(err 0)””; 分析 1.名词解释 在 x86 架构中,函数调用通常使用 call 指令来直接跳转到目标函数的地址。但是,当需要通过函数指针或动态链接调用函数时,就需要使用__x86_…...
Apache Spark 的基本概念
Apache Spark 是一种快速、可扩展、通用的数据处理引擎。它是一种基于内存的计算框架,支持分布式数据处理、机器学习、图形计算等多种计算任务。与传统的 Hadoop MapReduce 相比,Spark 具有更高的性能和更广泛的应用场景。 Spark 中的基本概念包括&…...
通讯协议介绍CoAP 协议解析
目录 1 通讯协议 2 TCP/IP 网络模型 2.1 TCP协议 2.1.1 TCP 连接过程 2.1.2 TCP 断开连接 2.1.3 TCP协议特点 2.2 UDP协议 2.2.1 UDP 协议特点 3 应用层协议简介 3.1 HTTP 协议 3.2 CoAP 协议 3.3 MQTT 协议 4 CoAP 协议详解 4.1 REST 风格 4.2 CoAP 首部分析 4…...
React 开发一个移动端项目(2)
配置基础路由 目标:配置登录页面的路由并显示在页面中 步骤: 安装路由: yarn add react-router-dom5.3.0 5 和 6 两个版本对组件类型的兼容性和函数组件支持有所改变,在这里使用的是 5。 和路由的类型声明文件 yarn add types…...
51单片机 点阵矩阵 坤坤代码
真正的黑子 #include <REGX52.H>void Delay(unsigned int xms); void _74HC595_WriteByte(unsigned char byte); void LED(unsigned char Y,DATA); void LED_Init();sbit RCKP3^5; //RCLK sbit SCKP3^6; //SRCL sbit SERP3^4; //SER //坤坤矩阵 unsigned char code D…...
Android13-图片视频选择器
在compileSDK 33 时,谷歌在安卓新增了 图片选择器 功能,支持单选、多选、选图片、视频等操作,并且不需要额外获取照片/音频权限。 具体实现如下: 1:请求 Log.d(TAG, "Build.VERSION.SDK_INT" Build.VERS…...
【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查
GIT合并解决冲突后,导致其他人代码遗失的排查 项目场景问题描述分析与处理:1. 警告分析2. 文件分析3. 问题关键4. 验证 解决策略总结 📕作者简介:战斧,从事金融IT行业,有着多年一线开发、架构经验ÿ…...
H264视频压缩格式
H264简介 H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准里称为H.264, 在MPEG的标准里是MPEG-4的一个组成部分-MPEG-4 Part 10,又叫Advanced Video Codec,因此常常称为MPEG-4AVC或直接叫AVC。 压缩算…...
动态的中秋爱心演示送女友用python生成爱心软件文末附c++语言写法
用python生成爱心软件 用python生成动态爱心软件 目录 用python生成爱心软件 完整代码 代码解释 逐句解释 效果展示: 如何打包 c写法 完整代码 import turtledef draw_heart():love turtle.Turtle()love.getscreen().bgcolor("black")love.…...
macOS - 使用VLC
文章目录 关于 VLC安装查看帮助流媒体 MRL 语法:URL 语法:主程序 (core)音频视频截图:窗口属性: 子画面屏幕显示(OSD):字幕:覆盖:轨道设置:播放控制:默认设备:高级: 输入播放列表性能选项: 热键跳跃大小: 关于 VLC VLC media player VLC 是一款自由、开…...
java微服务项目整合skywalking链路追踪框架
skywalking官网网址:Apache SkyWalking 目录 1、安装skywalking 2、微服务接入skywalking 3、skywalking数据持久化 1、安装skywalking 下载skywalking,本篇文章使用的skywalking版本是8.5.0 Index of /dist/skywalkinghttps://archive.apache.org/…...
pandas 笔记: interpolate
一个用于填充 NaN 值的工具 1 基本用法 DataFrame.interpolate(methodlinear, *, axis0, limitNone, inplaceFalse, limit_directionNone, limit_areaNone, downcast_NoDefault.no_default, **kwargs) 2 主要参数 method 多种插值技术 linear: 默认值,使用线性插…...
应用程序接口(API)安全的入门指南
本文简单回顾了 API 的发展历史,其基本概念、功能、相关协议、以及使用场景,重点讨论了与之相关的不同安全要素、威胁、认证方法、以及十二项优秀实践。 根据有记录的历史,随着 Salesforce 的销售自动化解决方案的推出,首个 Web…...
JavaWeb概念视频笔记
学习地址:102.尚硅谷_Tomcat-Tomcat服务器和Servlet版本的对应关系_哔哩哔哩_bilibili 目录 1.JavaWeb的概念 2.Web资源的分类 3.常用的Web服务器 4.Tomcat服务器和Servlet版本的对应关系 5.Tomcat的使用 a.安装 b.目录介绍 c.如何启动 Tomcat 服务器 另一…...
网络请求【小程序】
一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…...
python 调用adb shell
目录 python调用 bat,启动新窗口,但是不能自动在进入shell 后执行提前设置的操作。 python启动cmd新窗口,但是不能自动在进入shell 后执行提前设置的操作。 python调用 bat,启动新窗口,但是不能自动在进入shell 后执…...
vue3 使用 vite 构建的项目打包后无法访问
解决办法: 1、安装 vitejs/plugin-legacy -D npm i vitejs/plugin-legacy -D2、vite.config.js 添加配置 import legacy from vitejs/plugin-legacy; export default defineConfig({plugins: [legacy({targets: [defaults, not IE 11]}),vue(),],base:./, // http…...
C语言指针详解(4)———找工作必看指针笔试题汇总
指针对于编程工作的重要性 C语言指针在找工作中具有重要性。以下是几个原因: 1.高效的内存管理:C语言指针可以帮助程序员高效地管理内存,包括动态内存分配和释放,以及数据的访问和操作。这对于开发性能优化的应用程序非常重要&am…...
03MyBatis-Plus中的常用注解
常用注解 TableName MyBatis-Plus根据BaseMapper中指定的泛型(实体类型名)确定数据库中操作的表,如果根据实体类型名找不到数据库中对应的表则会报表不存在异常 //向表中插入一条数据 Test public void testInsert(){User user new User(null, "张三", 23, "…...
Android 修复在 Settings 首页,按键盘方向键逐个单选
Android 修复在 Settings 首页,按键盘方向键逐个单选 问题现象问题分析解决办法 问题现象 在 Settings 主界面,按键盘方向键上下会直接整个选中,无法单条选中变色,而在二级页面中按方向键上下是正常的。 没有遥控器可以通过 adb…...
SpringMvc第六战-【SpringMvcJSON返回异常处理机制】
前言: 小编讲述了:JSR303的概念,应用场景和在具体实例的使用;和拦截器的应用 今天小编来讲述的为cJSON返回&异常处理机制,json返回就不用多说,毕竟大部分数据都是通过Json来传递数据的,异…...
idea-Tabnine
教程地址 Code Faster with AI Code Completions | Tabnine...
联通面试题
一、GC 1.1、目标 GC的主要作用是自动识别和释放不再使用的对象,回收其所占用的内存,以防止内存泄漏和内存溢出的问题。 1.2、如何实现 1.2.1、标记阶段 GC从根对象(如线程栈中的引用、静态变量等)开始,通过可达性…...
[计组03]进程详解2
目录 应用程序 系统调用 驱动 软件 再看进程 进程管理 如何管理 ? 创建一个进程 注意 PCB 文件描述表 进程相关重点 为什么有进程调度 虚拟空间地址 这次我们从更加详细全面的角度看一下进程在计算机中体系中的展现 应用程序 应用程序 调动 系…...
网站制作的流程是什么/站内推广方式
目录 柔性数组的定义 柔性数组的特点 柔性数组的优势 C语言🛴 柔性数组的定义 什么是柔性数组呢? C99中,如果在结构体定义的时候,结构体中的最后一个元素允许是未知大小的数组,那么这个数组便叫做 柔性数组 。 下面举个…...
天津集体建设用地出售 网站/怎么做优化关键词
文章目录1. 背景介绍2. 跨云商内网打通2.1 阿里云环境安装部署2.1.1 加载驱动模块2.1.2 添加 GRE 隧道开机启动脚本2.1.3 配置 iptalbes 规则2.1.4 在其他节点配置路由2.2 华为云上安装部署2.2.1 加载驱动模块2.2.2 添加 GRE 隧道开机启动脚本2.2.3 配置 iptalbes 规则2.2.4 在…...
建设网站 翻译/网站seo关键词设置
最近负责的邮箱系统项目中有一个这样的需求:提供一个接口给业务层,可以通过邮箱查询到该用户的未读邮件个数。 之前的方案是通过查看用户目录下.INBOX/new目录中的文件个数,但是这个方法不准确,当有用户连接到邮箱服务器时&#x…...
企业公司黄页大全/长沙网站seo优化公司
- 前言 -大家都知道,计算机的瓶颈之一就是IO,为了解决内存与磁盘速度不匹配的问题,产生了缓存,将一些热点数据放在内存中,随用随取,降低连接到数据库的请求链接,避免数据库挂掉。需要注意的是&#…...
自己做装修图网站/免费自己制作网站
2019独角兽企业重金招聘Python工程师标准>>> 之前对于Storm的Acker机制进行了一些数学上的描述。 在这里,对于Storm的Ack机制 在源码实现上进行一些有意的补充。 1: 在Ack框架的设计之中,Storm发射出去的消息都会对应于一个随机…...
网站开发建设准备工作/济南百度推广代理商
实验内容 本次实践项目就是将 Linux 0.11 中采用的 TSS 切换部分去掉,取而代之的是基于堆栈的切换程序。具体的说,就是将 Linux 0.11 中的 switch_to 实现去掉,写成一段基于堆栈切换的代码。 本次实验包括如下内容: 编写汇编程…...