接收list参数_Python 犄角旮旯--List
列表的构建
List 是 Python 中最常用的容器之一,它是一个可变(mutable)容器,也就是说 List 的内容可以被修改,这也意味着它不能作为 Dict 的 key,也不能出现在 set 中。List 的创建有以下几种方式:
- [] 是一个空列表;
- [a] 或者 [a, b] 构成一个列表;
- 用推导式创建列表, [el for el in range(10)];
- list() 或者 list(iterable) 创建列表,如果 literable 是一个列表,那么会创建这个列表的副本。
可以通过下面的方式快速扩展列表:
l = ['a'] * 5
其结果是 5 个 [‘a’] 拼接相当于 [‘a’, ‘a’, ‘a’, ‘a’, ‘a’]。
但需要注意这样的情况:
ll = [[]] * 3
ll[0].append('apple')
预想中结果应该是
[['apple'], [], []]
但实际上结果是:
[['apple'], ['apple'], ['apple']]
前面的代码相当于下面这样:
inner = []
outer = [inner, inner, inner]
inner.append('apple')
outer 的所有元素都是 inner 的引用,它们的变化是同时发生的。
就地排序
List 提供了 sort 方法排序,其原型是:
sort(*, key=None, reverse=False)
最后两个参数必须以命名参数提供,其中参数 key 应当是一个函数,接收一个列表元素作为参数,实际排序会采用 key 函数的返回值作为排序依据;reverse 表示逆序排列。
sort 方法的排序是 “就地” 完成,也就是说 sort 方法并不会创建原列表的副本,而是直接改变当前列表,这一点需要特别注意。如果有多种排序需要,应当用 copy 方法先创建列表的副本。
默认排序使用的是 List 元素的值,对于复杂对象,我们可以传入 key 函数,比如对 Person 对象分别以年龄、身高排序。
class Person:def __init__(self, name, age, length):self.name = nameself.age = ageself.length = lengthdef __repr__(self):return f'<class Person> name:{self.name}, age:{self.age}, length:{self.length}'__str__ = __repr__# 创建一个 Person 数组
staffs = [Person("A", 18, 180), Person("B", 12, 175), Person("D", 32, 170)]# 按 age 就地排序
def get_person_age(person):return person.agelist.sort(staffs, key = get_person_age)
print("sort by age-->", staffs)# 按身高就地排序,使用 lambda
list.sort(staffs, key = lambda person: person.length)
print("sort by length-->", staffs)
结果是这样的:
sort by age--> [<class Person> name:B, age:12, length:175, <class Person> name:A, age:18, length:180, <class Person> name:D, age:32, length:170]
sort by length--> [<class Person> name:D, age:32, length:170, <class Person> name:B, age:12, length:175, <class Person> name:A, age:18, length:180]
让自定义对象支持比较和排序
sort 方法实际上只使用了成员的 < 比较操作,我们也可以实现 __lt__() 方法让自定义对象支持 < 操作,直接排序。
class Person:def __init__(self, name, age, length):self.name = nameself.age = ageself.length = lengthdef __repr__(self):return f'<class Person> name:{self.name}, age:{self.age}, length:{self.length}'__str__ = __repr__def __lt__(self, obj):if not isinstance(obj, self.__class__):raise ValueError("Person instance only!")# 默认比较姓名return self.name < Orville's Ideas and Interests# 创建一个 Person 数组
staffs = [Person("A", 18, 180), Person("B", 12, 175), Person("D", 32, 170)]# 直接排序
list.sort(staffs)
print("sort by name-->", staffs)
达到预期排序结果:
sort by name--> [<class Person> name:A, age:18, length:180, <class Person> name:B, age:12, length:175, <class Person> name:D, age:32, length:170]
排序中的异常
由于 sort 方法是 “就地” 操作,如果我们在排序中出现异常中断操作,那么 List 会处于部分被修改的不确定状态。
Python 官方文档docs.python.org
首发公众号 “江川Go”,关注了解程序员的烧脑日常。
接收list参数_Python 犄角旮旯--List相关推荐
- python怎么接收前端参数_Python常驻任务实现接收外界参数代码解析
实现一个简单的常驻任务是容易的,写一个while True就可以了,但是同时要能接收外界传来的参数,就稍微有点复杂. 我第一个想到的是网络编程中的server/client模式 server作为常驻进 ...
- python 接收外部参数_python 接收处理外带的参数方法
python 接收处理外带的参数方法 在执行python 代码的时候,有时候需要传递外面的参数进行处理 这个该怎么实现呢? 需要一个模块 from sys import argv 当然也可以直接只导入 ...
- python常驻运行_Python常驻任务实现接收外界参数代码解析
实现一个简单的常驻任务是容易的,写一个while True就可以了,但是同时要能接收外界传来的参数,就稍微有点复杂. 我第一个想到的是网络编程中的server/client模式 server作为常驻进 ...
- SpringMVC框架 学习DAY_02 : 接收请求参数/向模板页面转发数据/重定向与转发 /Session
1. 接收客户端提交的请求参数 1.1. 使用HttpServletRequest接收请求参数 在处理请求的方法的参数列表中,添加HttpServletRequest类型的参数,在处理请求的过程中,调 ...
- 【Groovy】闭包 Closure ( 闭包参数列表规则 | 默认参数列表 | 不接收参数 | 接收自定义参数 )
文章目录 一.闭包参数列表 二.闭包参数列表代码示例 一.闭包参数列表 闭包的参数设置有如下情况 : 不接收参数 : 如果在定义闭包时 , 只写了 " -> " 符号 , 没 ...
- php接受post值报错,php接收post参数时报错怎么办
php接收post参数时报错的解决办法:首先搜索[php.ini]中 [always_populate_raw_post_data ]:然后将前面的[;]去掉,并重启服务即可. php接收post参数 ...
- get request uni 参数_Python+request+unittest实现接口测试框架集成实例
1.为什么要写代码实现接口自动化 大家知道很多接口测试工具可以实现对接口的测试,如postman.jmeter.fiddler等等,而且使用方便,那么为什么还要写代码实现接口自动化呢?工具虽然方便,但 ...
- python中自定义函数如何传递动态参数_python 函数的动态参数
1. 函数的动态参数 1. *args 位置参数动态传参 2. **kwargs 关键字参数动态传参 顺序:位置参数, *args, 默认值, **kwargs def func(*args, **k ...
- java控制器接收请求参数_SpringMVC之接收请求参数和页面传参
Spring接收请求参数 1,使用HttpServletRequest获取 Java代码 @RequestMapping("/login.do") public String lo ...
最新文章
- python高阶面试题_Python 爬虫面试题 170 道:2019 版
- Java线上问题排查思路及Linux常用问题分析命令学习
- Hadoop记录-监控几个思路
- 关于URL指向的icon的存储问题
- 9月11日学习内容整理:正则表达式,re模块
- .NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库
- 如何在虚拟机上安装wsus服务器,如何在Hyper-V虚拟机上安装WSUS服务器技巧
- java ref 应用类型_Java四种引用类型
- 2018腾讯内部转岗面试题3——找出数组中比左边大比右边的小的元素
- 《穷爸爸,富爸爸》读书笔记
- 前端开发 —— js 常用工具函数(utilities)
- Django Model出现的中文问题
- Flink 在众安保险金融业务的应用
- iFrame左树目录
- 免费中文Python电子书
- 实现类CAD的交互式命令系统
- SAP采购订单价格与信息记录价格不匹配
- 一种基于STM32F1 MCU的增量型编码器测速的方法
- 爬取免费代理,拥有自己的代理池
- 音频wav文件格式分析
热门文章
- python URLError,HTTPError 的异常处理
- 解决“Cannot merge new index 67208 into a non-jumbo instruction”的问题
- Android 自定义拍照,解决图片旋转,拍照参数设置兼容问题
- 对于未来chrome80 samesite问题的兼容解决方案
- 关于微信中的localStorage及使用cookie的解决方案
- OwinStartup不触发
- 如何在Python中便宜地获取大文件的行数?
- 将jQuery的复选框设置为“已选中”?
- 使用ros3d.js实现web 端3D建图
- 动态注册广播接收者,屏幕锁定Android