python 多维list 排序_一行代码的优雅| Python列表生成式

欢迎回来,上一周我们整理了基础课中三大结构有关内容的具体应用及案例。可以通过以下几篇推文进行回溯:

Python语言基础50课

我的Python - 100天笔记 |D1-D7

我的Python - 100天笔记 |D8-D14

列表是Python中非常常见的数据结构,在基础课中也占了不小的篇幅。今天的推送就列表相关的内容再整理。

列表是包含有索引的元素集,其中的元素可由字符、数字、字符串及子列表组成,用 list = []表示。基本操作包括:

  1. 增加元素list.append(obj) 在列表末尾添加新的元素 list.insert(index,obj) 能够在列表任意位置添加新的元素。

  2. 删除元素list.pop(index) 移除索引位置的元素,同时会返还被移除元素的值。del list[index] 移除移除索引位置的元素,但不返回移除元素的值,注意中间是空格。list.remove(obj) 移除第一个匹配到的元素。

  3. 修改元素list[index] = obj

  4. 查找元素list.index('obj')

  5. 列表排序sort(list) 永久性排序。temp_list = sorted(list) 返回一个新建的已排序列表。list.sort(reverse=Ture) 反向排序。

  6. 列表切片

    list[start:end:step] 切片是支持步长选择的。

嵌套列表的使用

嵌套的列表可以用来表示表格或数学上的矩阵,可以用于记录多维的数据,但是需要注意的是,嵌套列表不能够使用以下的方式生成:

scores = [[0] * 3] * 5print(scores)    # [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
# 嵌套的列表需要多次索引操作才能获取元素

正确的方式如下(生成式):

scores = [[0] * 3 for _ in range(5)]scores[0][0] = 95print(scores)    # [[95, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

示例图如下:

da2ab2f8d7926ba574ffad6d08f95e00.png

第011课:常用数据结构之列表

列表生成式

[exp for iter_var in iterable]

生成式中,首先会将可迭代对象iterable中的每个元素的结果赋值给iter_var,然后通过exp得到一个新的计算值;最后把所有通过exp得到的计算值以一个新列表的形式返回。也就是与下列语句同效:

L = []
for iter_var in iterable:
    L.append(exp)

类似的,还有以下两种可使用的方式:

#带过滤功能语法格式
[exp for iter_var in iterable if_exp]

#循环嵌套语法格式
[exp for iter_var_A in iterable_A for iter_var_B in iterable_B]

也就是在之前的基础上,添加判断条件或嵌套循环。

例如,过滤出一个指定的数字列表中值大于20的元素

L = [3, 7, 11, 14,22, 33, 26, 57, 99]
# 不使用列表生成式实现
list_new = []
for x in L:
    if x 20:
        list_new.append(x)

# 使用列表生成式实现
list_newi = [x for x in L if x > 20]

再来一个例子:把一个列表中所有的字符串转换成小写,非字符串元素移除

L = ['TOM', 'Peter', 10, 'Jerry']
# 用列表生成式实现
list1 = [x.lower() for x in L if isinstance(x, str)]

# 用map()和filter()函数实现
list2 = list(map(lambda x: x.lower(), filter(lambda x: isinstance(x, str), L)))

我们在之前推送中聊过这类 map()和filter() 高阶函数的简单用法,高阶函数的英文为 Higher-order function ,怎么理解呢。我们从内置函数再来理解一下上面的提及到的函数名定义规则与变量一致,换句话说函数名也可以认为是一个变量。

那么,既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

高阶函数,我们以 map(f,list) #对列表内元素逐个处理,举个栗子:

# 对每一个元素进行平方计算
def f(x):
    return x*x

for i in map(f,[1,2,3,4,5,6,7]):
    print(i)

# 使用正则取列表中所有元素的关键字,省略部分代码
import re
def id(x):
    return re.findall(r'ORF\d+_(.*?):',x)[0]

for line in f:
    if line.startswith('P'):
        line = line.split('\t')
        line1 =list(map(id,line))
        print(line1)

比较来看,对于大部分需求来讲,使用列表生成式和使用高阶函数都能实现。这对于那些元素数量很大或无限的可迭代对象来说显然是更合适的,因为可以避免不必要的内存空间浪费。

enumerate函数

遍历列表时,课程中有一个函数值得关注 enumerate,该函数在循环遍历时会取到一个二元组,解包之后第一个值是索引,第二个值是元素,下面是一个简单的对比。

items = ['Python', 'Java', 'Go', 'Swift']

for index in range(len(items)):
    print(f'{index}: {items[index]}')

for index, item in enumerate(items):
    print(f'{index}: {item}')

第013课:列表和元组的应用

终于梳理了生成式的一些用法,同时从比较中引申出不同方法实现相同目的的用法,希望对你有启发~


参考资料

  jackfrued/ Python-Core-50-Courses

  https://www.cnblogs.com/yyds/p/6281453.html

往期推荐

ComplexHeatmap包更新支持pheatmap转换

  4种绘制带误差线的柱形图


生信技能树目前已经公开了三个生信知识库,记得来关注哦~

每周文献分享

https://www.yuque.com/biotrainee/weeklypaper

肿瘤外显子分析指南

https://www.yuque.com/biotrainee/wes

生物统计从理论到实践

https://www.yuque.com/biotrainee/biostat


友情宣传

强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶:

•生信爆款入门-全球听(买一得五)(第4期) ,你的生物信息学入门课。•数据挖掘第2期(两天变三周,实力加量),医学生/医生首选技能提高课。•生信技能树的2019年终总结 ,你的生物信息学成长宝藏•2020学习主旋律,B站74小时免费教学视频为你领路

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

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

相关文章

verilog 生成块_如何高效的编写Verilog——终极版

为了高效的编写Verilog,通常有些编辑器插件可以自动生成代码,比如自动端口定义,自动连线,自动实例化等等。公司的环境有很好用的自动化插件,想给自己的电脑也整个怎么做。比如Emacs中有个插件叫verilog-mode。但是博主…

剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件

JVM的参数和知识点太多啦,记录下来,供自己随时回顾。java对象什么时候进入年轻代(新生代)?java对象什么时候进入老年代?对象优先在Eden分配大对象直接进入老年代空间分配担保机制java对象什么时候进入年轻代…

Arduino的串口结束符及串口缓冲区

文章目录1.深入理解缓冲区和Serial.available():2.深入理解串口结束符3.验证结论:1.深入理解缓冲区和Serial.available(): 运行下面的代码,我发现如果不在串口输入任何数字,就会一直显示“no”,输入一个数…

android 圆角边框边框渐变,支持边框、圆角、渐变色、透明度的GradientButton

最近在项目中发现好多Button背景颜色相同,但圆角大小不等的Button,这样就得写一大堆的shape或者selector,不便于管理及后期维护,于是乎变想能不能写一个支持边框、圆角、渐变色、透明度的万用Button呢。为了能够兼容button自带的属…

鸿蒙ide如何运行,深入浅析华为鸿蒙IDE安装与Hello World

一、系统安装1. 到官网下载HUAWEI DevEco Studio2. 安装二、创建项目创建项目目前还没有手机选项,所以我先选择一个电视:IDE的环境看起来和idea差不多,应该比较容易上手。从“关于”里也可以看到,确实是基于IDEA开源版本开发的。我…

中快捷搜索_同事用1分钟,我用半小时,原来是因为这8个Word快捷键,秒杀一切办公技巧...

同事用1分钟,我用半小时,这8个Word快捷键,秒杀一切办公技巧​mp.weixin.qq.com文|王羽卒今天给小伙伴们分享几个实用又有效的快捷键,帮助快速完成工作,同事用了半小时,你1分钟就能解决哟&#x…

荣耀x10max能不能升级为鸿蒙,荣耀终于放出大招!4部荣耀旗舰可升级鸿蒙,网友:终于等到了...

4月24~26日,华为将召开开发者大会,届时手机使用的鸿蒙系统将正式上线,华为和部分荣耀手机将会首先支持。其实,早在2月22日的华为Mate X2的发布会上,余承东就说过4月发布鸿蒙OS。华为并不想推出鸿蒙系统,如果…

android 7.0新增控件,自定义Android控件,封装Arcgis for Android测距测面积工具控件

控件的功能包括,测距、测面积、撤销、恢复、清除、完成六个功能。测距:在地图上绘制线段进行长度测量测面积:在地图上绘制一个面,进行面积测量撤销:撤销到上一步绘制,只能撤销未完成的测量恢复:…

多媒体分析与理解_如何设计一个出色的数字多媒体展厅?

展厅设计方案是了解每个多媒体设备的应用方法,那么如何让设备跟展厅结合一起,展示出我们想要的科技效果,核心就是用户体验度。今天华南数字科技的小编就为您介绍下数字多媒体展厅对用户体验方面的几个重点要素。1、细节展示不论多前卫的多媒体…

gradient设置上下渐变_图解CSS: CSS渐变

CSS的渐变主要分布在 conic-gradient()和repeating-conic-gradient()两个属性。在CSS中,CSS的渐变相当于图像,我们可以使用线性渐变(linear-gradient()和repeating-linear-gradient())、径向渐变(radial-gradient()和repeating-radial-gradient())和锥形…

2021泗阳致远中学高考成绩查询,2021高考成绩什么时候发布?可通过哪些途径查询?...

3、安徽省高考成绩预计将于6月23日公布各批次录取分数线和高考成绩,考生可通过安徽省教育招生考试院自行查分;4、湖南高考成绩将于6月25日左右公布,本科不再分一二三批,考生可通过湖南教育政务网、湖南省普通高校招生考试考生综合…

mysql数据库的字符集_mysql数据库中字符集乱码问题原因及解决

前言有的时候我们在查看数据库数据时,会看到乱码。实际上,无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题。下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决。mysql数据库的字符集直白的说&#x…

1主5从mysql数据库_MySQL主从复制虽好,能完美解决数据库单点问题吗?

一、单个数据库服务器的缺点数据库服务器存在单点问题;数据库服务器资源无法满足增长的读写请求;高峰时数据库连接数经常超过上限。二、如何解决单点问题增加额外的数据库服务器,组建数据库集群;同一集群中的数据库服务器需要具有…

惠普z6计算机进不去桌面,HP Z6 桌面工作站 | HP® HK 惠普香港

Intel、Thunderbolt 及 Xeon 均為 Intel Corporation 於美國及/或其他國家或地區的商標。Microsoft 及 Windows 為 Microsoft Corporation 於美國及/或其他國家或地區的註冊商標或商標。NVIDIA 是 NVIDIA Corporation 在美國及其他國家或地區的商標及/或註冊商標。USB Type-C™…

mysql定义条件和处理_mysql sql存储过程条件定义与处理

一、条件定义DECLARE condition_name CONDITION FOR condition_valecondition_value:sqlstate[value] sqldata_value |mysql教程_error_code二、条件处理DECLARE htype HANDLER FOR cond_value[...] sp_statementhandtype_value:sqlstate [value] saltate_value|contentname|sq…

长沙医学院学位计算机考试内容,湖南长沙医学院2017年9月计算机等级考试报名时间...

长沙医学院2017年下半年第49次全国计算机等级考试(以下简称NCRE)将于2017年9月23至25日举行。为做好本次考试报名及相关考务工作,现将有关事项通知如下:一、报名时间:2016年6月7日—2016年6月18日,逾期不接受任何理由的补报名。二…

mysql dnslog_dnslog小技巧

一、dnslog利用场景主要针对无回显的情况。Sql-BlindRCESSRFRFI(Remote File Inclusion)二、原理将dnslog平台中的特有字段payload带入目标发起dns请求,通过dns解析将请求后的关键信息组合成新的三级域名带出,在ns服务器的dns日志中显示出来。三、案例展…

2019哈佛计算机专业录取,2019哈佛大学早申请录取数据公布 录取率再降1个点仅为13.4%...

出结果了,出结果了,作为美国在全球范围内最负盛名的哈佛大学,与近日公布2019美国本科申请提前录取的相关数据。今年哈佛大学本科学院向6,968位在2023届提前录取轮次申请人中的935位发出了录取通知,申请录取率约为13.4%&#xff0c…

mysql中pi是什么意思_MySQL 基础知识与常用命令

MySQLMySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Inte…

科幻计算机类小说,短篇科幻小说推荐 | 黄金时代的五部科幻杰作

编注:本文是少数派读书月「我读过的好书」征文活动的入围文章。本文仅代表作者本人观点,少数派对标题和排版略作调整。想了解如何参与本次读书征文,赢取各种丰厚奖品,你可以 点此查看 活动规则和奖品清单。文章包含五个故事的情节…