Python的列表生成式

在很多时候, 我们会写下这样的代码:

list1 = []
for i in range(100):
    list1.append(i)

这样写真的很麻烦! 三行代码就为了生成一个0-99的列表
Python的作者肯定意识到了这一点, 所以:

list1 = [x for x in range(100)]

就可以了! 这玩意就是列表生成式!

列表生成式

列表生成式一般的格式是:

[exp for exp in ...]

例如:

[x for x in range(10)]

这条语句的作用是: 让x在range(10)中遍历一遍, 且把x添加到返回的队列当中, 当遍历完成, 或被break掉时, 返回
所以, 当你在print上面那条语句的结果时:

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

注意了, exp是表达式, 也可以填个函数进去, 填一个算式进去, 真正创建变量的地方是在循环前

N个循环的列表生成式

当大家学会了新知识到处装逼时, 小A发现了一个问题
小A: 可是, 当我的代码如下时, 列表生成式不就没法用了?

list1 = []
for i in range(5):
    for j in range(5):
        list1.append(i + j)

唔, 好像是这样子的, 但是呢, 这串代码也可以使用列表生成式简写

list1 = [a + b for i in range(5) for j in range(5)]

没错! 一个列表生成式可以使用N个循环, 但是你要注意, 这N个循环都是嵌套在上一个循环里的!

哇!!!!!列表生成式真是太厉害啦!

在列表生成式中使用判断语句

没过几天, 小B同学又发现了一个问题
小B: 如果我想要通过列表生成式生成一个列表, 列表内的数字是0-99所有的质数, 该怎么办呢?
假设现在有一个函数is_prime(number) 它会返回number是不是一个质数(T/F)
先来看看不使用列表生成式的样子:

list1 = []
for i in range(100):
    if(is_prime(i)):
        list1.append(i)

写一个列表生成式已经难不倒我们了, 可是, if语句在列表生成式中可以用吗?
可以的! 在列表生成式中可以使用if语句! 也可以出现else语句, 所以:

list1 = [i for i in range(100) if(is_prime(i))]

当if语句为真时, 就将i添加到返回队列中, 否则不添加, else语句就是当if语句不成立式, 向列表里添加else后的数字, 如:

list1 = [i if(i % 2 == 0) else 0 for i in range(100)]

是的, 如果你想要使用else语句, 你就需要将if语句写在第一个exp后面

当然, 你也可以嵌套多个if语句

本篇Blog到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值