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

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]]

示例图如下:

第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 redef 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小时免费教学视频为你领路

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

  1. Python零基础入门-1 从一行代码开始运行Python程序

    一.前言 Python语法简单,大多数情况下,根据单词的意思就可以猜测出程序的功能.在介绍Python语法之前,先看一些Pyhton代码的案例,这些案例都很简单,可以在PyChram中运行.(PyCh ...

  2. python 多维list 排序_人生苦短 | Python列表和元组归纳整理

    1. 列表 1.1. 列表是什么? 列表是由一系列按特定顺序排列的元素组成,所以是有序的集合.列表中的元素可以是不同类型的,列表中也可以嵌套列表.在Python中,用方括号[]来表示列表,并用逗号来分 ...

  3. 灰色的rgb值_一行代码实现图片的灰色效果

    今天是清明节,警笛长鸣,万众默哀.送别英雄,生活继续. 大部分的app配图,今天都是灰色.这种图片的转换在python里非常容易实现.一行代码搞定. 下面是DE8UG上次说个故事:再见VB.你好,精彩 ...

  4. 有一个List集合,里面存储了5个Student对象。Student有姓名、年龄和成绩属性,按照多个属性进行排序(一行代码解决list对象集合排序问题)。

    有一个List集合,里面存储了5个Student对象.Student有姓名.年龄和成绩属性,按照要求进行排序(一行代码解决list对象集合排序问题). 要求对List集合进行排序,排序规则是: 1.先 ...

  5. python运维工程师待遇_会Python的运维工程师能挣多少钱?

    或许你经常听说,一个高级运维必须会Python.一个不会Python的运维拿不了高薪.那么,Python和运维的关系是什么呢?为什么Python更适合做运维?今天达妹就来带你详细看一下. 工作一年以上 ...

  6. Python编程语言学习:仅需一行代码将字符串化的数字数组、int数组、float数组实现之间互换(将一个字符串数组转换成整型数组)

    Python编程语言学习:仅需一行代码将字符串化的数字数组.int数组.float数组实现之间互换(将一个字符串数组转换成整型数组) 目录

  7. 为了提高python代码运行速度和进行_一行代码让你的python运行速度提高100倍

    Python用的好,猪也能飞起来.今天,带大家学习如何让Python飞起来的方法,干货满满哦! python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器 ...

  8. python童年_一行代码玩童年小游戏

    首先,我们要打开cmd,以此下载freegames这个包.有一些新手小白可能会问:cmd是什么-- 打开cmd 首先按住笔记本电脑(或者台式机)的win键(就是四个小方块组成一个梯形的键),接着按下r ...

  9. pandas添加一行数据_恨晚,Python探索性数据分析神器pandas-profiling,一行代码搞定...

    我们使用Pandas进行数据分析时,首先要先对数据集进行探索性数据分析(Exploratory data analysis),以便有一个大体的了解,明确后续数据处理.分析方向,数据EDA大致包含如下内 ...

最新文章

  1. Ubuntu Server 12.04下cobbler + dnsmasq +tftpd-hpa的安装配置(四)
  2. 算法实现太难了?机器学习也需要开源软件
  3. Android架构师亲述:我从某度外包到字节,你知道我经历了什么吗?
  4. MyBatisPlus的ActiveRecord(活动记录)简介以及怎样使用
  5. 仿ios便签软件_手机便签软件误删怎么恢复?
  6. Kafka解惑之Old Producer(1)—— Beginning
  7. sap.ui.layout.form.SimpleForm.prototype
  8. 2021牛客第一场H.Hash Function—FFT求差值的卷
  9. 中山大学提出新型行人重识别方法和史上最大评测基准
  10. python - 环境搭建
  11. 5 html 根据手机转动而转动_最全的全景照片拍摄方法合集,手机也能拍哦
  12. 云智能资深专家崮德:谈谈我对华为HarmonyOS 2.0的看法
  13. 【WPF】Slider 任意位置拖动
  14. Android SDK测试
  15. 各种气象数据下载地址推荐
  16. Codelf 命名神器
  17. 国产数据库-达梦数据库安装
  18. 发现一个国外的学习网站
  19. java path 注解_Java内置系统注解和元注解
  20. 《Molecular Plant》新思路:比较转录组+比较基因组研究小麦高效氮利用分子机制

热门文章

  1. 3D手势姿态跟踪算法:手机端实时检测,多个手势同时捕捉
  2. iterm2一键登陆服务器(门神权限不用每次都输密码进行验证)
  3. android 切换字体崩溃,androidx - 在Android 10 / Android Q上使用捆绑的ttf字体时崩溃 - 堆栈内存溢出...
  4. npm包管理器安装模块
  5. linux vnc 改端口号,基于Linux中vnc配置端口号的修改方法
  6. 计算机的iscsi配置,我们将了解如何设置自己的支持iscsi配置的存储节点
  7. matlab是那个国家,这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色,拍摄的时候反光比较少...
  8. android最新设计规范,Android应用未来的设计规范
  9. php可以控制硬件吗,控制面板的作用是设置硬件接口吗?
  10. html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案