Python在方括号中使用for循环,类似[0foriinrange(10)],叫列表解析...

作者博文地址:https://www.cnblogs.com/liu-shuai/

列表解析

  根据已有列表,高效创建新列表的方式。

  列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中。

语法:

  [expression for iter_val in iterable]

  [expression for iter_val in iterable if cond_expr]

实例展示:

1 要求:列出1~10所有数字的平方 2 #################################################### 3 1、普通方法: 
4 >>> L = [ ] 
5 >>> for i in range(1,11): 
6 ... L.append(i**2) 
7 ... 
8 >>> print L 9 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 
10 #################################################### 11 
2、列表解析 
12 >>>L = [ i**2 for i in range(1,11)] 
13 >>>print L 14 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
1 要求:列出1~10中大于等于4的数字的平方 2 #################################################### 3 1、普通方法:  4 >>> L = []  5 >>> for i in range(1,11):  6 ... if i >= 4:  7 ... L.append(i**2)  8 ...  9 >>> print L 10 [16, 25, 36, 49, 64, 81, 100] 11 #################################################### 12 2、列表解析 13 >>>L = [ i**2 for i in range(1,11) if i >= 4 ] 14 >>>print L 15 [16, 25, 36, 49, 64, 81, 100]
1 要求:列出1~10所有数字的平方除以2的值 2 #################################################### 3 1、普通方法 4 >>> L = [] 5 >>> for i in range(1,11): 6 ... L.append(i**2/2) 7 ... 8 >>> print L 9 [0, 2, 4, 8, 12, 18, 24, 32, 40, 50] 10 #################################################### 11 2、列表解析 12 >>> L = [i**2/2 for i in range(1,11) ] 13 >>> print L 14 [0, 2, 4, 8, 12, 18, 24, 32, 40, 50]
1 要求:列出'/var/log'中所有已'.log'结尾的文件  2 ##################################################  3 1、普通方法  4 >>>import os  5 >>>file = []  6 >>> for file in os.listdir('/var/log'):  7 ... if file.endswith('.log'):  8 ... file.append(file)  9 ... 10 >>> print file 11 ['anaconda.ifcfg.log', 'Xorg.0.log', 'anaconda.storage.log', 'Xorg.9.log', 'yum.log', 'anaconda.log', 'dracut.log', 'pm-powersave.log', 'anaconda.yum.log', 'wpa_supplicant.log', 'boot.log', 'spice-vdagent.log', 'anaconda.program.log'] 12 ################################################## 13 2.列表解析 14 >>> import os 15 >>> file = [ file for file in os.listdir('/var/log') if file.endswith('.log') ] 16 >>> print file 17 ['anaconda.ifcfg.log', 'Xorg.0.log', 'anaconda.storage.log', 'Xorg.9.log', 'yum.log', 'anaconda.log', 'dracut.log', 'pm-powersave.log', 'anaconda.yum.log', 'wpa_supplicant.log', 'boot.log', 'spice-vdagent.log', 'anaconda.program.log']
1 要求:实现两个列表中的元素逐一配对。 2 1、普通方法: 3 >>> L1 = ['x','y','z'] 4 >>> L2 = [1,2,3] 5 >>> L3 = [] 6 >>> for a in L1: 7 ... for b in L2: 8 ... L3.append((a,b)) 9 ... 10 >>> print L3 11 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)] 12 #################################################### 13 2、列表解析: 14 >>> L1 = ['x','y','z'] 15 >>> L2 = [1,2,3] 16 L3 = [ (a,b) for a in L1 for b in L2 ] 17 >>> print L3 18 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
1 使用列表解析生成 9*9 乘法表2 3 print('\n'.join([''.join(['%s*%s=%-2s '%(y,x,x*y)for y in range(1,x+1)])for x in range(1,10)]))

说明:

  以上实例,使用列表解析比使用普通方法的速度几乎可以快1倍。因此推荐使用列表解析。

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

5.1.3. List Comprehensions

List comprehensions provide a concise way to create lists.Common applications are to make new lists where each element is the result ofsome operations applied to each member of another sequence or iterable, or tocreate a subsequence of those elements that satisfy a certain condition.

For example, assume we want to create a list of squares, like:

>>>

>>> squares = []>>> for x in range(10):... squares.append(x**2)...>>> squares[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Note that this creates (or overwrites) a variable named x that still existsafter the loop completes. We can calculate the list of squares without anyside effects using:

squares = list(map(lambda x: x**2, range(10)))

or, equivalently:

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

which is more concise and readable.

A list comprehension consists of brackets containing an expression followedby a for clause, then zero or more for or ifclauses. The result will be a new list resulting from evaluating the expressionin the context of the for and if clauses which follow it.For example, this listcomp combines the elements of two lists if they are notequal:

>>>

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y][(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

and it’s equivalent to:

>>>

>>> combs = []>>> for x in [1,2,3]:... for y in [3,1,4]:... if x != y:... combs.append((x, y))...>>> combs[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

Note how the order of the for and if statements is thesame in both these snippets.

If the expression is a tuple (e.g. the (x, y) in the previous example),it must be parenthesized.

>>>

>>> vec = [-4, -2, 0, 2, 4]>>> # create a new list with the values doubled>>> [x*2 for x in vec][-8, -4, 0, 4, 8]>>> # filter the list to exclude negative numbers>>> [x for x in vec if x >= 0][0, 2, 4]>>> # apply a function to all the elements>>> [abs(x) for x in vec][4, 2, 0, 2, 4]>>> # call a method on each element>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']>>> [weapon.strip() for weapon in freshfruit]['banana', 'loganberry', 'passion fruit']>>> # create a list of 2-tuples like (number, square)>>> [(x, x**2) for x in range(6)][(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]>>> # the tuple must be parenthesized, otherwise an error is raised>>> [x, x**2 for x in range(6)]  File '<stdin>', line 1, in <module>    [x, x**2 for x in range(6)]               ^SyntaxError: invalid syntax>>> # flatten a list using a listcomp with two 'for'>>> vec = [[1,2,3], [4,5,6], [7,8,9]]>>> [num for elem in vec for num in elem][1, 2, 3, 4, 5, 6, 7, 8, 9]

List comprehensions can contain complex expressions and nested functions:

>>>

>>> from math import pi>>> [str(round(pi, i)) for i in range(1, 6)]['3.1', '3.14', '3.142', '3.1416', '3.14159']
(0)

相关推荐

  • 第76天:Scrapy 模拟登陆

    想爬取网站数据?先登录网站!对于大多数大型网站来说,想要爬取他们的数据,第一道门槛就是登录网站.下面请跟随我的步伐来学习如何模拟登陆网站. 为什么进行模拟登陆? 互联网上的网站分两种:需要登录和不需要 ...

  • Learn Functional Python in 10 Minutes | Datacruiser's Blog

    最近在学习python,对函数式编程特别感兴趣,当然,这并不是python的专利,不过最近确实看到一遍文章正好以python为例来讲解函数式编程,特把它翻译过来与大家分享. 原文链接如下: Learn ...

  • 优雅简洁的列表推导式

    优雅的列表推导式 最近比较累,给自己放了很长的假.使用廖雪峰网站学习时一开始学过列表推导式这方面的知识,但不知道有什么用,也没觉得好看简洁.但接触的多了,用的多了之后,发现推导式确实好用. 使用推导式 ...

  • Python中可迭代对象怎么获取迭代器?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略

    Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略 for循环中常用方法经验技巧 1.利用enumerate函数对列表实现for循环中常 ...

  • Python编程语言学习:在for循环中如何同时使用三个变量

    Python编程语言学习:在for循环中如何同时使用三个变量 在for循环中如何同时使用三个变量 start_lists=[1,10,20,40] end_lists=[9,19,29,49] lab ...

  • 诚之和:如何理解Python基础中的for循环语句

    如何理解Python基础中的for循环语句,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题. Python for循环可以遍历任何序列的项目 ...

  • 古诗词中,有很多类似前人的诗句,算不算抄袭呢?

    前言 昨天刷问答跳出了这个问题:古代诗词中有很多类似的诗句,能算得上抄袭吗? 类似的问题老街以前回答过,我们看到的很多古诗词会出现这类现象,当然不是抄袭. 诗词篇幅短小,出现与前人类似的诗句很常见有的 ...

  • Python | 有序序列中元素的查找问题解决方法

    问题描述示例:如何查找有序序列中某一的元素输入:[1,2,3,4,5,6,--,100]   61 #查找的元素输出:61解决方案查找元素.一般地,我们可以用for循环进行遍历,再用if语句进行查找. ...

  • python读取pdf中的文本

    python处理pdf也是常用的技术了,对于python3来说,pdfminer3k是一个非常好的工具. pip install pdfminer3k 首先,为了满足大部分人的需求,我先给一个通用一点 ...

  • ModelBuilder中的For循环和While循环

    鸽了这么久了的ModelBuilder教程,开始恢复更新了,嘤嘤嘤 现在开始讲迭代器,迭代是指以一定的自动化程度多次重复某个过程,通常又称为循环.说的通俗点就是批量循环处理,简称批处理. 需要注意的是 ...

  • 用 Python 实现黑客帝国中的数字雨落既视感

    来源:Python 技术「ID: pythonall」 说起黑客帝国,相信大家即使没看过系列影片也应该会听过这个名字,该系列最新一部是 2003 年上映的,距现在已经有 10 几年了,如果大家看过影片 ...

  • Python(for和while)循环嵌套及用法

    Python 不仅支持 if 语句相互嵌套,while 和 for 循环结构也支持嵌套.所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 wh ...