python之列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:

>>> [m + n for m in ‘ABC‘ for n in ‘XYZ‘]
[‘AX‘, ‘AY‘, ‘AZ‘, ‘BX‘, ‘BY‘, ‘BZ‘, ‘CX‘, ‘CY‘, ‘CZ‘]

三层和三层以上的循环就很少用到了。

运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

>>> import os # 导入os模块,模块的概念后面讲到
>>> [d for d in os.listdir(‘.‘)] # os.listdir可以列出文件和目录
[‘.emacs.d‘, ‘.ssh‘, ‘.Trash‘, ‘Adlm‘, ‘Applications‘, ‘Desktop‘, ‘Documents‘, ‘Downloads‘, ‘Library‘, ‘Movies‘, ‘Music‘, ‘Pictures‘, ‘Public‘, ‘VirtualBox VMs‘, ‘Workspace‘, ‘XCode‘]

for循环其实可以同时使用两个甚至多个变量,比如dictitems()可以同时迭代key和value:

>>> d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ }
>>> for k, v in d.items():
...     print(k, ‘=‘, v)
...
y = B
x = A
z = C

因此,列表生成式也可以使用两个变量来生成list:

>>> d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ }
>>> [k + ‘=‘ + v for k, v in d.items()]
[‘y=B‘, ‘x=A‘, ‘z=C‘]

最后把一个list中所有的字符串变成小写:

>>> L = [‘Hello‘, ‘World‘, ‘IBM‘, ‘Apple‘]
>>> [s.lower() for s in L]
[‘hello‘, ‘world‘, ‘ibm‘, ‘apple‘]
时间: 2024-10-14 10:28:07

python之列表生成式的相关文章

Python函数编程——列表生成式和生成器

Python函数编程--列表生成式和生成器 一.列表生成式 现在有个需求,现有列表a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,你怎么实现? 1.二逼青年版 生成一个新列表b,遍历列表a,把每个值加1后存在b里,最后再把a=b, 这样二逼的原因不言而喻,生成了新列表,浪费了内存空间. >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> b = [] >>> for i in

python的列表生成式

一.r的防止字符转义 print r"a\nb" 运行结果: a\nb 二.获取变量类型 a = r"a\nb" print type(a) 运行结果: <type 'str'> 三.判断类型 a = r"a\nb" print isinstance(a,str) 运行结果: True 四.对list.tuple.dict.set进行迭代 4.1常用的方式 list = ['a','b','c'] for i in list: pri

python的列表生成式和生成器

1.列表生成式是Python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理,语法格式为: [exp for val in collection if condition] 相当于 resul = [] for val in collection: if(condition): result.appen(exp) 例子:求1到10的偶数的平方,代码如下: li = [x*x for x in xrange(1,11) if x%2==0] print

Python之列表生成式、生成器

列表生成式 --可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁: >>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] >>> [m + n for m in 'ABC' for n in '

5.1.24 Python之列表生成式、生成器、可迭代对象与迭代器

语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法糖的概念 "语法糖",从字面上看应该是一种语法."糖",可以理解为简单.简洁.其实我们也已经意识到,没有这些被称为"语法糖"的语法,我们也能实现相应的功能,而 "语法糖"使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这

python中列表生成式

1.列表生成式Python内置的一种极其强大的生成列表 list 的表达式.返回结果必须是列表. 格式:[ 变量表达式 for 变量 in 表达式 if 变量的判断条件(结果为True 或者False)] #需求1:接收变量 k a b常规写法:s = '51 5000 10000'a = s.split()print(a)li = []for item in s.split(): li.append(int(item))print(li)k,a,b = liprint(k,a,b)列表生成式:

使用PYTHON列表生成式过滤数据

python的列表生成式是一个很有用生成列表(List)的表达式.其中一个应用是作为列表的过滤器使用 例如 从一个列表中过滤掉奇数使用下面的语句就可以 [item for item in [1,2,3,4,5,6,7] if item % 2 == 0] 反过来,去掉偶数也是同样的道理 [item for item in [1,2,3,4,5,6,7] if item % 2 != 0]

【370】Python列表生成式(for 写入一行)

参考: python用列表生成式写嵌套循环的方法_python_脚本之家 参考: python之列表生成式 - 旷野足迹 - 博客园 对于读取Twitter数据最终会得到一个超级复杂的json文件, 也就是一堆字典嵌套, 因此找到想要的内容需要多几层嵌套, 而使用列表生成式可以有效减少代码数量, 主要就是将多行的循环或者判断写入一行, 需要注意的是只是将本来属于最后一行的内容提前, 而对于多层嵌套来说, 整体的顺序不变~ 举个栗子~ >>> a = [[1, 2, 3], [4, 5,

列表生成式&amp;三元表达式

列表生成式: 用于生成一个新的列表,是Python内置的一种极其强大的生成list的表达式.一.语法格式:[exp for iter_var in iterable] 工作过程: (1)迭代iterable中的每个元素: (2)每次迭代都先把结果赋值给iter_var,然后通过exp得到一个新的计算值: (3)最后把所有通过exp得到的计算值以一个新列表的形式返回. 例如: L=[i for i in range(10)] print(L)#[0, 1, 2, 3, 4, 5, 6, 7, 8,