python列表高级操作——快来看看你会多少!

网友投稿 821 2022-05-30

(1)列表生成式(高级用法)

列表推导式(List Comprehension)是一种简化代码的优美方法。官方文档——**列表推导式提供了一种创建列表的简洁方法。**使用列表推导式能够非常简洁的构造一个新列表,只需要用一个简洁的表达式即可对得到的元素进行转换变形。

使用Python列表推导式的语法格式: variable = [out_exp_res for out_exp in input_list if out_exp == 2] out_exp_res:列表生成元素表达式,可以是有返回值的函数; for out_exp in input_list:迭代input_list,将out_exp传入out_exp_res表达式中; if out_exp == 2:判断根据条件可以过滤哪些值。

第一个:基本使用

惯性思维——常规方法解决:

list_end = [] for x in range(10): list_end.append(x**2) print(list_end)

借由列表推导式——一行代码解决:

list_end1 = [x**2 for x in range(10)] print(list_end1)

二者输出都为:

传统方法实现:

nums = [] for x in range(30): if x % 3 == 0: nums.append(x) print(nums)

使用列表推导式一行代码解决:

nums1 = [x for x in range(30) if x % 3 == 0] print(nums1)

二者输出都为:

第二个:升级版使用——使用列表生成式的同时使用函数处理

需求:首先获取30以内能够整除3的整数,然后一次输出所获得整数的平方。

def squared(x): return x**2 end = [squared(x) for x in range(30) if x % 3 == 0] print(end)

python列表高级操作——快来看看你会多少!

第三个:高级版使用——删选列表中特定元素的高级操作

在python程序中,有时候筛选列表中的某些特定元素时,筛选标准无法简单的表示在列表推导式或生成器表达式中,例如当筛选过程涉及异常处理或者其他一些复杂的细节时。此时可以考虑将处理筛选功能的代码放到单独的功能函数中,然后使用内建的filter()函数进行处理。

需求:筛选指定列表中的所有整数元素!

values = ['1', '2', '-3', '-', '4', 'N/A', '5'] def is_int(val): try: x = int(val) return True except ValueError: return False # 注意:因为使用函数filter()创建了一个迭代器,所以想要得到一个列表形式的结果,必须在filter()前面加上list()函数。 isvals = list(filter(is_int, values)) print(isvals)

(2)删除列表中的重复元素并保持顺序不变

第一个版本:

需求:删除列表中重复出现的元素,并且保持剩下元素的显示顺序不变。如果序列中保存的元素是可散列的(hashable),那么此功能可以使用集合和生成器实现。

知识点补给站: 如果一个对象是可散列的,那么在它的生存期内必须是不可变的,这需要有一个__hash__()方法。在python程序中, 整数,浮点数,字符串和元组都是不可变的。

上代码:

def fun(items): seen = set() for item in items: if item not in seen: yield item seen.add(item) if __name__ == '__main__': a = [5, 3, 3, 8, 6, 5, 9] print(a) print(list(fun(a)))

第二个版本:

上述代码有个缺陷——只有当序列中的元素是可散列的时候才能实现功能。如果想在不可散列的对象序列中实现此功能,该如何实现呢?

上代码:

def fun(items, key=None): seen = set() for item in items: val = item if key is None else key(item) if val not in seen: yield item seen.add(val) if __name__ == '__main__': a = [ {'x' :2, 'y':3}, {'x' :1, 'y':4}, {'x' :2, 'y':3}, {'x' :2, 'y':3}, {'x' :10, 'y':15} ] print(a) print(list(fun(a, key=lambda a: (a['x'], a['y']))))

注意:上述代码中函数fun()中的参数key的功能是将序列中的元素转换为可散列的类型,这样做的目的是检测重复选项。

5G教育 Python 数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mybatis超详细学习笔记(一)小白入门HelloWorld
下一篇:Tensorflow |(5)模型保存与恢复、自定义命令行参数
相关文章