概述:
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
列表生成式的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。列表表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生。
格式:
variable = [out_exp for out_exp in input_list if out_exp == 2]
例题练习:
下面通过例题来对列表生成式进行深入的理解。
1. 生成一个列表,列表元素分别为 [1*1,2*2,3*3……n*n],假设n = 10。
## 若用一般方法实现代码如下:
## 若用列表生成式:
但是结果一模一样,如下图:
2.接着上一个需求,要求返回的序列中不存在偶数项:
## 若用列表生成式代码如下:
## 其实将上面的代码翻译一下,就和下面代码一个意思:
执行结果如下:
3. 字符串s1 ='ABC',字符串 s2 = '123',要求:生成序列 A1 A2 A3 B1 B2 B3 C1 C2 C3
## 初学者思维:
## python老手思维:
运行结果是相同的:
4. 将3x3的矩阵li1转化成一个数组(列表),且使该数组中仅仅包含偶数:
li1 =[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 采用列表生成式的代码如下:
# 下面代码这种思维就有点像用c语言编程了,既然python中有简单的方法,我们最好就用简单的方法:
运行结果如下:
5. 找出1-10之间所有的偶数,并且返回一个列表(这个列表中含以这个偶数为半径的圆的面积)
方法一:使用列表生成式,计算圆的面积要用到圆周率参数,需要导入math模块:
方法二: 定义一个求圆面积的函数,然后在列表生成式中直接调用函数,从而求出序列中符合条件的半径的面积:
运行结果:
6. 找出1-100之间的所有的质数:
## 说明:列表生成式和函数的结合使用,应用是很广泛的:
7. 腾讯2018校招在线编程题:
第一步:从终端接收一个输入的数:
num1 = int(input('输入3<num<1000的整数:'))
第二步:找出接收的数的范围以内的质数:
def zhishu(f):
if f == 1:
return False
for j in range(2, f):
res = f % j
if res == 0:
return False
else:
return True
list1 = [i for i in range(2, num1+1) if zhishu(i)]
第三步: 求出符合题目条件的质数对的数量:
方法一:
N = 0
for n in list1:
for k in list1:
if n + k == num1 and n <= k: ### 写到这时,马同学思维是解决重复,我想着怎样让不重复
N += 1
print(N)
方法二:
N = 0
for item in list1: ### 老师的思维
if 10-item in list1 and item <= 10-item:
N += 1
print(N)
明显第二种方法更简单,而且思维也不是太难想。 但是为什么就想不到了,因为对题目理解的太浅薄了,对题目这个问题的条件没有相互联系,对题目过程没有做深入的演练,导致只能用很low的思维去解决问题。