在很多时候, 我们会写下这样的代码:
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语句