python 列表生成式

列表特性:列表是一次性生成的

a = [1,2,3,4,5,6,7,8,9]

[ i*2 for i in range(10)]  ###--->列表生成式

===[2,4,6,8,10,12,14,16,18,20]===

两个列表的区别:

1列表是写死的,2列表可以里面做一些操作把相应的东西输出出来

列表生成式目的是为了使代码更简洁,且可以实现更复杂的功能,如将i的值传至函数中

[fun(i)  for i in range(10)]

生成式:通过生成式可以直接创建一个列表,但受内存大小的限制,列表的容量是有限的,而且创建一个大数据量的列表,不仅占用的内存空间很大,而且如果仅访问前面几个元素,那么后面的元素所占用的空间都浪费掉了。

所以,如果列表可以按照某种算法推算出来,我们可以在循环的过程中推断出后续需要的列表元素而不需要创建完整的列表,从而大大节省了内存空间。在python中这种一边循环了边推算下一个列表元素的方式称之为生成器:generator

创建一个generator有很多方法,第一种简单的方法为把列表生成式的[]修改为(),就创建了一个generator

[ i*2 for i in range(10)]  ###--->列表生成式

==结果===[2,4,6,8,10,12,14,16,18,20]===

( i*2 for i in range(10))  ###--->generator

==结果===<generator object <genexpr> at 0x1022ef630>===

generator是每调用一次则生成一个元素,若没调用则不生成后面的元素,从而节省内存空间

例:

g = ( i*2 for i in range(10))

print(g.__next__())

print(g.__next__())

print(‘********‘)

print(g.__next__())

==结果===

0

2

********

4

它只有__next__()方法,没有其他方法,它不能被切片,如想取第3个值g(2)是不行的

以上方式也可以用循环的方式去调用它

如斐波那契数列,除第一个数外,任意一个数都是由前面两个数相加得到:

1,1,2,3,5,8,13,21,34.......

斐波那契数列用列表生成式写不出来,但是用函数却很容易:

def fib(max):

n,a,b=0,0,1

while n < max:

print(b)

a,b= b,a+b

n = n+1

return ‘done‘

时间: 2024-11-08 11:03:47

python 列表生成式的相关文章

使用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]

python列表生成式&amp;生成器&amp;迭代器

一.列表生成式 什么是列表生成式? 列表生成式是快速生成列表的一种方式.(貌似有些废话) 更专业点的说法:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 在python2.7里 举个例子,要生成list [1,2,3,4,5],可以用range(1,6) >>> range(1,6) [1, 2, 3, 4, 5] 但是如果要生成[1x1,2x2,3x3,4x4,5x5]怎么做呢? 普通青年做法: >>&

初学Python——列表生成式、生成器和迭代器

一.列表生成式 假如现在有这样一个需求:快速生成一个列表[1,2,3,4,5,6,7,8,9,10],该如何实现? 在不知道列表生成式的情况下,可能会这样写: a=[1,2,3,4,5,6,7,8,9,10] 如果要每个值+1呢?可能会这样: for index,i in enumerate(a): a[index] +=1 print(a) 不够方便,这里讲一个快速生成列表的方法:列表生成式.意思就是立即生成列表. 生成一个1到10的列表: a = [i+1 for i in range(10

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

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

python列表生成式、生成器,迭代器与二分法

一.列表生成式 列表生成式是快速生成一个列表的一些公式 列表生成式的书写格式:[x*x for x in range(1 , 11)] 列表生成式语法是固定的,[]里面for 前面是对列表里面数据的运算操作,后面跟平常for循序一样遍历去读取.运行后会自动生成新的列表 一般列表生成式 list1 = list(range(1,10)) #不使用列表生成式生成列表 list2 = [x for x in range(1,10)] #使用列表生成式生成列表 print(list1) print(li

Python 列表生成式,函数,字符串,文件操作,生成器

知识点 1 ==与is区别:Python中对象包含的三个基本要素,分别是:id(身份标识).type(数据类型)和value(值). ==只比较值,而is比较身份标识也就是内存地址,而且在is比较中关于数据类型也就是只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False. 2 浅拷贝和深拷贝:需要使用copy模块 浅拷贝:copy()方法实现 1.对于不可变类型 Number String Tuple,浅复制仅仅是地

python列表生成式、列表推导式

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁. 格式 [x for x in 内容] [x for x in 内容 if 条件] 1:要把生成的元素x放到前面,执行的时候,先执行后面的for循环 2:后面跟上for循环 可以有多个for循环,也可以在for循环后面加个if条件 3:for循环后面可以是任何方式的迭代器(元组,列表,生成器..)只要可以迭代的对象中有一个值. 1:单循环列表生成式 字符串生成列表 print([x for x in

Python列表生成式练习

1 ''' 2 如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错 3 使用内建的isinstance函数可以判断一个变量是不是字符串: 4 返回True 或 False 5 ''' 6 L1 = ['Hello', 'World', 18, 'Apple', None] 7 print([L2.lower() for L2 in L1 if isinstance(L2, str) == True])

Python列表生成式和生成器

[1]列表生成器:列表生成式就是一个用来生成列表的特定语法形式的表达式. 1.基础语句结构:[exp for iter_var in iterable例如:a=[f(x) for x in range(10)] 2.工作过程: 迭代iterable中的每个元素:每次迭代都先把结果赋值给iter_var,然后通过exp得到一个新的计算值:最后把所有通过exp得到的计算值以一个新列表的形式返回. 相当于这样的过程:L = [] for iter_var in iterable: L.append(e