Python Cookbook-4.7 在行列表中完成对列的删除和排序

任务

你有一个包含列表(行)的列表,现在你想获得另一个列表,该列表包含了同样的行但是其中一些列被删除或者重新排序了。

解决方案

列表推导很适合这个任务。假设你有:

listOfRows = [ [1,2,3,4],[5,6,7,8],[9,10,11,12] ]

需要另一个有同样行的列表,但是其中第二列被删除了,第三和第四列则互换了位置我们用一个简单的列表推导来完成任务:

newList = [ [row[0],row[3],row[2] ] for row in listOfRows ]

还有一个方法同样具有可操作性,也许还更优雅一些,即采用一个辅助的序列(列表或元组),此序列的列索引位置正好是需要的顺序。这样,在外层对 listOfRows 进行循环操作的列表推导的内部,又加入了一个嵌套的对辅助序列进行循环操作的内层列表推导。

newList = [ [row[ci]for ci in(0,3,2)] for row in listofRows ]

讨论

我一般用列表的列表来代表二维的阵列。我把这些列表看做以二维阵列的“行”为元素的列表。我常常需要处理这种二维阵列的列,一般是重新排序,有时还会忽略列中的部分内容。尽管列表推导在别处大显神通,但粗略一看,它在这里似乎用处不大(至少我的第一感觉是这样)。

列表推导会产生一个新的列表,而不是修改现有的列表。当需要修改一个现有的列表时,最好的办法是将现有列表的内容赋值为一个列表推导。举个例子,假设要修改listOfRows,对于本节的任务,可以写成:

listOfRows[:] = [ [row[0],row[3],row[2] ] for row in listOfRows ]

正如本节解决方案的第二个例子所示,还可以考虑使用一个辅助的序列,其中包含的列索引按需要的顺序排列,这比第一个例子用硬编码指定顺序要好。你可能对嵌套的列表推导感到不放心,但事实上它比你想象的更简单安全。如果采用解决方案中的第二种方式,会同时获得更多的通用性,因为可以给辅助序列一个名字,并使用这个名字来对一些行列表进行重新排序,或者将其作为参数传递给一个函数,等等:

def pick_and_reorder_columns(listofRows, column_indexes):return [ [row[ci] for ci in column_indexes] for row in listofRows ]
Columns = 0,3,2
newlistOfPandas = pick_and_reorder_columns(oldListOfPandas, columns)
newListOfCats = pick_and_reorder_columns(oldListOfCats, columns)

上例所做的事情和本节前面的代码片段所做的事情完全一样,不过它操作两个独立的“旧的”列表,并分别获得两个对应的“新的”列表。追求最大程度的通用性是一种难以抵御的诱惑,但在这里,这个pick_and_reorder_columns所表现出的通用性似乎恰到好处。

最后一条,在前面用到的一些函数中,一些人喜欢用看上去更漂亮的方式来表示“内层”列表推导,而不采用简单直接的方式,比如:

[row[ci]for ci in column_indexes]

他们喜欢用内置的map函数以及row的特殊的,__getitem__方法(常被用作被绑定方法)来完成索引子任务,因此他们这样编写代码:

map(row.__getitem__,column_indexes)

具体到某些不同的 Python 的版本,这种看上去漂亮但又有点让人困扰的方法可能速度会快一些。但仍然认为体现简洁性的列表推导是最佳方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36871.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft Edge浏览器的取证分析(基于Chromium)

概述 早在2019年,微软就用Chromium替换了EdgeHTML浏览器引擎,这是微软支持谷歌Chrome浏览器的一个开源项目。通过切换到Chromium,Edge与Chrome浏览器共享一个共同的架构,这意味着用于Chrome浏览器调查的取证技术也适用于Edge。 …

python学智能算法(八)|决策树

【1】引言 前序学习进程中,已经对KNN邻近算法有了探索,相关文章链接为: python学智能算法(七)|KNN邻近算法-CSDN博客 但KNN邻近算法有一个特点是:它在分类的时候,不能知晓每个类别内事物的具…

RTSP/Onvif安防监控系统EasyNVR级联视频上云系统EasyNVS报错“Login error”的原因排查与解决

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力,能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、W…

通信网络安全防护定级备案需要材料汇总

通信网络安全防护定级备案工作需要到指定的系统上先写基本信息,然后上传对应的材料,提交后会流转到地方通管局或部里审核。对于第一次使用该系统的朋友来说,通信网络安全防护定级备案需要什么材料是目前比较关注的问题。下面calm13就结合以往…

15:00面试,15:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

ORACLE 19.8版本数据库环境EXPDP导数据的报错处理

近期用户在做EXPDP导出时,报错异常termination终止;EXPDP本身是简单的功能并且这个环境也是经常做导出的,到底是什么原因导致了这个问题呢? 导出脚本报错: 分析导出日志,当时系统资源充足但是进程启动失败,…

【Editor】动态添加/移除宏定义

ProjectSetting中OtherSettings页签 执行工具指令 using UnityEditor; using UnityEngine; using System.Linq;public class Tools : Editor {//在菜单栏中点击自动添加[MenuItem("Tools/AddScriptingSymbols")]private static void AddScriptingSymbols(){//获取当…

Web-Machine-N7靶机实战攻略

1.安装并开启靶机 下载VirtualBox:https://www.virtualbox.org 导入虚拟机 设置为桥接模式 2.获取靶机IP Kali设为桥接模式 3.访问靶机 4.获取敏感目录文件和端口 gobuster dir -u http://172.16.2.68 -w /usr/share/wordlists/dirbuster/directory-list-2.3-me…

C语言实验:数组,指针实现问题求解

实验目的:掌握数组,指针的使用 实验内容: 1直接选择排序 2字符串运算 3交换数字 流程图: 1直接选择排序 2字符串运算 3交换数字 程序调试 1直接选择排序 1-1出现问题(贴图并说明) 错误原因&#xf…

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解 (图1-1) 一、鸿蒙中App、HAP、HAR、HSP是什么? (1)App Pack(Application Package) 是应用发布的形态,上架应用市场是以App Pa…

LiteIDE中配置golang编译生成无CMD窗口EXE的步骤

LiteIDE中配置golang编译生成无CMD窗口EXE的步骤 一、环境配置1、设置GOROOT‌2、配置GOPATH‌ 二、项目编译参数设置1、新建/打开项目‌2、修改编译配置‌3、其他优化选项(可选)‌ 三、构建与验证1、编译生成EXE‌2、验证无窗口效果‌ 四、注意事项 一、…

暗光增强技术研究进展与产品落地综合分析(2023-2025)

一、引言 暗光增强技术作为计算机视觉与移动影像领域的核心研究方向之一,近年来在算法创新、硬件适配及产品落地方面取得了显著进展。本文从技术研究与产业应用两个维度,系统梳理近三年(2023-2025)该领域的关键突破,并对比分析主流手机厂商的影像技术优劣势。 二、暗光增…

理解 RAG 第四部分:RAGA 和其他评估框架

检索增强生成(RAG) 在扩展独立大型语言模型(LLM)的限制和克服其诸多局限性方面发挥了关键作用。通过整合检索器,RAG 提高了响应相关性和事实准确性:它只需实时利用外部知识源(如矢量文档库),并在原始用户查询或提示中添…

基于视觉的核桃分级与套膜装置研究(大纲)

基于视觉的核桃分级与套膜装置研究:从设计到实现的完整指南 (SolidWorks、OpenCV、STM32开发实践) 🌟 项目背景与目标 1.1 为什么选择视觉分级与套膜? 产业痛点: 中国核桃年产量全球第一,但…

蓝桥杯2023年第十四届省赛真题-子矩阵

题目来自DOTCPP: 暴力思路(两个测试点超时): 题目要求我们求出子矩阵的最大值和最小值的乘积,我们可以枚举矩阵中的所有点,以这个点为其子矩阵的左上顶点,然后判断一下能不能构成子矩阵。如果可…

系统思考—啤酒游戏经营决策沙盘模拟

再次感谢文华学院的邀请,为经纬集团管理层带来 《啤酒游戏经营决策沙盘》! 很多朋友问:“最近是不是啤酒游戏上的少了?” 其实,真正的关键不是游戏本身,而是——如何让大家真正看见复杂系统中的隐性结构。 …

Linux 驱动开发笔记--1.驱动开发的引入

1.引入 Linux内核的整体架构本就非常庞大,其包含的组件也非常多。而我们怎样把需要的部分都包含在内核中呢? 一种方法是把所有需要的功能都编译到Linux内核中。这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删…

跨域问题确认及处理

背景如下: 近期在做的项目中,有个奇怪的需求,需要在JSP项目中嵌套一个VUE项目,原因是:JSP项目是在运且不大方便重构的一个项目,新需求又想为了未来着想做一套单独的项目,无奈只能嵌套。 当项目开…

Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战

一、Qwen2.5-VL 简介 Qwen2.5-VL,Qwen 模型家族的旗舰视觉语言模型,比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat (Qwen Chat)并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1)直观地理解事物&…

实时监控、数据分析!Web-Check构建你的网站健康检测系统实操方案

文章目录 前言1.关于Web-Check2.功能特点3.安装Docker4.创建并启动Web-Check容器5.本地访问测试6.公网远程访问本地Web-Check7.内网穿透工具安装8.创建远程连接公网地址9.使用固定公网地址远程访问 前言 在数字化运维领域,网站稳定性保障始终是开发者和运维团队的核…