Python3列表生成式

Python列表生成式

所谓的列表生成式,就是指的轻量级循环创建列表

一.利用循环或者判断语句生成列表

举例题目:生成一个1~10的列表。

方法1:
i = 1
a = []
while i <= 10:
	a.apend(i)
方法2:
for i in range(1,11):
	print(i)
#注意:方法2用到的range()在Python2中存在风险——当范围较大时程序占用内存过多会被关闭
#但是在Python3中range()不会在使用的同时创建数组占用较多的内存空间,而是用一个数
#传递一个数,并不会占用大量内存

接下来用一种更为简便的方法来生成列表:

二.给列表生成式中添加for语句

方法3:
a = [i for i in range(1,11)]    #a结果为列表[1,2,3,4,5,6,7,8,9,10]
#与方法3比较说明:
a = [5 for i in range(1,11)]    #a结果为列表[5,5,5,5,5,5,5,5,5,5]	

通过观察方法3的对比说明,在上面语句的中括号中for i in range(a,b)仅仅表示将它前面数字或者变量放入列表的次数,第一行是将i变量的值放入列表10次,因为i在不断变化,结果为1~10的数组;而第二行因为前面是数字5,因此将5放入列表10次,为10个5的列表。
列表生成式中循环嵌套for语句:

a = [i for i in range(3) for j in range(2)]
#输出结果a = [0,0,1,1,2,2]
#range(3)等价于range(0,3)
中括号中的语句相当于:a = []
				    for i in range(3):
				 	    for j in range (2):
				 	    a.append(i)
————————————————————————————————————————————
要想将j一起加入列表,可以写为:
a = [(i,j) for i in range(3) for j in range(2)]
#输出结果a = [(0,0),(0,1),(1,0),(1,1),(2,0),(2,1)]
相当于:a = []
	   for i in range(3):
		   for j in range (2):
		   a.append((i,j))    即向a列表中传入(i,j)
————————————————————————————————————————————
同理也可以再添加for语句,向列表中添加(i,j,k)

三.给列表生成式中添加if语句

示例:

a = [i for i in range(10) if i%2==0]
#结果:a=[0,2,4,6,8]
#if i%2==0用来判断给列表a中添加的i是不是偶数,如果是则添加到列表中,否则不添加到列表中
相当于:a = []
       for i in range(10):
           if i%2==0:
           a.append(i)

利用if语句可以选择性的添加到列表中的数据。

四.练习

1)生成一个[[1,2,3],[4,5,6]…]的列表最大值在100以内
2)请写出一段 Python 代码实现分组一个 list 里面的元素,比如 [1,2,3,…100]变成 [[1,2,3],[4,5,6]…]

解:(答案不唯一,仅代表个人观点。)
第一题:a=[(i,i+1,i+2) for i in range(1,100,3) if (i+2)%3<=33]
第二题:b=[i for i in range(101)]
	   a=[b[i:i+3] for i in range(0,len(b),3)]  
#b为分组前列表[1,2,3,...100],a为分组后的列表[[1,2,3],[4,5,6]....]

注意:
#在a后面用b[i:i+3]而不用[b[i],b[i+1],b[i+2]]原因是:
#	1)前者语句更简短,美观
#	2)后者只能用于当列表b的长度能被3整除的时候,如果b的长度不能被3整除,比如在上例
#	   中1~100的时候,每3个数字为一个列表,最后剩余b[99]=100为单独一个列表,而根本
#	   不会存在b[99+1]和b[99+2],程序会报错!而使用方括号的形式截取字符的形式:
#	   b[i:i+3]就不会报错
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值