Python - 列表解析式
列表解析——用来动态地创建列表
[expr for iter_var in iterable if cond_expr]
例子一:
map(lambda x: x**2, range(6)) [0, 1, 4, 9, 16, 25]
[x**2 for x in range(6)] [0, 1, 4, 9, 16, 25]
列表解析式可以取代内建的map()函数以及lambda,而且++效率更高++。
例子二:
seq = [11, 10, 9, 8, 7, 6] filter(lambda x: x % 2, seq) [11, 9, 7]
[x for x in seq if x % 2] [11, 9, 7]
例子三:
找出文本中最长的词
# 第一个最长的词
longest = ''
for word in text:
if len(word) > len(longest):
longest = word
#所有最长的词
maxlen = max(len(word) for word in text) # 生成器表达式 [word for word in text if len(word) == maxlen] #链表推导式
不足: 列表解析得一个不足就是必要生成所有数据,用于创建整个列表。这可能对有大量数据得迭代其有负面效应。
++解决方法++:生成器表达式,通过结合列表解析和生成器解决了这个问题。
嵌套列表推导式
例一
all_data = [[1,3,5,7,9],
[2,4,6,8,10]] result = []
for nums in all_data:
temp_num = [num for num in nums if num >= 5]
result.extend(temp_num)
嵌套列表推导式
result = [num for nums in all_data for num in nums if num >= 5]
推导式中for的部分是按嵌套顺序排列的。
例二
some_tuples = [(1,2,3), (4,5,6), (7,8,9)] flattened = [x for tup in some_tuples for x in tup] flattened
[1,2,3,4,5,6,7,8,9]
列表解析配合if else
列表解析总共有两种形式:
1. [i for i in range(k) if condition]:此时if起条件判断作用,满足条件的,将被返回成为最终生成的列表的一员。
2. [i if condition else exp for exp]:此时if...else被用来赋值,满足条件的i以及else被用来生成最终的列表。
以上情况对多个for仍然成立。
print([i for i in range(10) if i%2 == 0])
print([i if i == 0 else 100 for i in range(10)]) [0, 2, 4, 6, 8]
[0, 100, 100, 100, 100, 100, 100, 100, 100, 100]
参考来源:http://blog.csdn.net/shingle_/article/details/55050701
http://blog.csdn.net/zk_j1994/article/details/72809260
Python - 列表解析式的更多相关文章
- [翻译]Python List Comprehensions: Explained Visually || Python列表解析式
原文1地址: http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/ 原文2地址: http://blog.tea ...
- python列表解析式,字典解析式,集合解析式和生成器
一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...
- Python 列表解析式竟然支持异步?
PEP原文:https://www.python.org/dev/peps/pep-0530 PEP标题:PEP 530 -- Asynchronous Comprehensions PEP作者:Yu ...
- Python列表解析式的正确使用方式
先来逼逼两句: Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法.在本文中,将会展示列表解析式 (List Comprehension).我们将讨论如何使用它?什 ...
- Python列表解析式的正确使用方式(二)
高级解析式 条件逻辑早些时候,我向您展示了这个公式: python学习交流群:660193417### new_list = [expression for member in iterable] 公 ...
- Python列表解析式的正确使用方式(一)
先来逼逼两句: Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法.在本文中,将会展示列表解析式 (List Comprehension).我们将讨论如何使用它?什 ...
- [python] 列表解析式的高效与简洁
方法一(列表解析式): list1 = ["abc","efg","hij"] list2 = [i[0] for i in list1] ...
- Python - 列表解析式/生成器表达式
列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...
- [转]Python 的列表解析式,集合解析式,字典解析式
Python 的列表解析式,集合解析式,字典解析式 这三种都是 python 里面的语法糖. 语法糖,Syntactic Sugar,就是为了写程序时候少出错,发明的一些简便的方法,但不影响这个语法的 ...
随机推荐
- [20170909]为什么是12秒.txt
[20170909]为什么是12秒.txt --//在开发程序时我一般会强调开发尽量不要写一些自定义函数,往往可能导致CPU忙.--//例子很像这样: CREATE OR REPLACE FUNCTI ...
- 将 Azure 文件共享用于 Windows VM
可将 Azure 文件共享用作一种从 VM 中存储和访问文件的方式. 例如,你可以存储一个要与所有 VM 共享的脚本或应用程序配置文件. 本主题将介绍如何创建和装载 Azure 文件共享,以及如何上传 ...
- Xamarin是无懈可击还是鸡肋?浅谈对Xamarin的学习
微软宣布跨平台已经有几个年头,当C#代码可以在其他平台运行时,我相信对于每个热爱.net的程序猿还是十分欣慰的,最近工作需要在一直研究和学习.net的跨平台开发Xamarin,网上对其优点总结也是一大 ...
- 扩展BootstapTable支持TreeGrid
(function ($) { 'use strict'; var sprintf = function (str) { var args = arguments, flag = true, i = ...
- SVN与Git比较的优缺点差异
目录: SVN与Git比较(一)集中式vs分布式 SVN与Git比较(二)版本库与工作区 SVN与Git比较(三)全局版本号和全球版本号 SVN与Git比较(四)部分检出 SVN与Git比较(五)更新 ...
- Apache的配置详解 带图
对Apache 的 Http.conf 各项配置详解 1.01 ServerRoot 配置 [ServerRoot "" 主要用于指定 Apache 的安装路径,此选项参数值在安装 ...
- logstash启动失败的问题追查
在实验中logstash是作为日志过滤器的作用,日志收集使用的则是filebeat组件.redis作为缓存器,logstash从redis中拉取数据进行过滤并传给elasticsearch组件. 但是 ...
- 01LaTeX学习系列之---TeX的介绍与认识
目录 01TeX的介绍与认识 目录 前言 (一)TeX 的宣传 TeX - Beauty and Fun 1. TeX 是什么? 2. TeX 是哪家公司生产的? 3. 我们今天主角的名字怎么念啊?& ...
- Django 使用mysql 数据库流程
创建一个mysql数据库 在settings中配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': ...
- c++11の多线程应用
std::thread 应用十分方便,通过#include<thread>引入 std::thread t(subFunction); t.join(); 主线程将等待子线程完成后,继续调 ...