引入:
需求1:接收变量k,a,b
s = '51 5000 10000'
li = []
for item in s.split():
li.append(int(item))
k,a,b = li
print(k,a,b)
li=[int(item) for item in s.split()]
print(li)
print(k,a,b)
需求2:生成一个列表,列表元素分别为[1^1, 2^2, 3^3, 4^4 … n^n]
li = []
for i in range(1,8):
li.append(i**i)
print(li)
li = [i**i for i in range(1,8)]
print(li)
列表生成式的格式:
[experssion for item in 序列 if 判断语句]
举例:
找出1-8中的偶数再平方
li = [i ** 2 for i in range(1, 8) if i % 2 == 0]
print(li)
找出1~10之间的所有的偶数
print([i for i in range(1, 11) if i % 2 == 0])
找出1~1000之间的所有质数
def isPrime(num):
pass
print([i for i in range(1, 1000) if isPrime(i)])
s1='ABC' s2='123'(for嵌套循环)
s1 = ‘ABC’
s2 = ‘123’
将两个合并,输出为 ‘A1’, ‘A2’, ‘A3’, ‘B1’, ‘B2’, ‘B3’, ‘C1’, ‘C2’, 'C3’
print([i + j for i in 'ABC' for j in '123'])
注意:
列表生成式中前后都可写成函数形式。
例:
方法一:
[i**2 for i in range(2,10,2)]
方法二:
def fun(i):
a = i ** 2
[fun(i) for i in range(2,10,2)]
列表生成式变形之for循环嵌套:
需求:讲3x3的矩阵转换成一堆数组
[
[1,2,3],
[4,5,6],
[7,8,9]
]
[1,2,3,4,5,6,7,8,9]
方法一:
li = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
resLi = []
for item1 in li: # [1,2,3] [4,5,6] [7,8,9]
for item2 in item1:
if item2 % 2 == 0:
resLi.append(item2)
print(resLi)
方法二:
print([item2 for item1 in li for item2 in item1])
from itertools import chain
print(list(chain(*li)))
列表生成式案例
案例一:将列表中所有内容都变成小写
li = ['dasdaFSDFSFDSF','dadDSADSAsdaDASsadas']
print([i.lower() for i in li])
案例二:找出/var/log目录中,所有以.log结尾的文件名或者目录名
import os
#print(os.listdir('/var/log'))
print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')])
案例三:找出1~10之间所有偶数, 并且返回一个列表,(包含以这个偶数为半径的圆的面积)
import math
方法一:
li = []
for r in range(2, 11, 2):
square = math.pi * r * r
li.append(square)
print(li)
方法二:
print([math.pi * r * r for r in range(2, 11, 2)])
方法三:
def square(r):
"""求以r为半径的圆"""
res = math.pi *r*r
return res
print([square(r) for r in range(2,11,2)])
案例四:找出1~100之间所有的质数
思路:
判断num是否为质数,如果是质数,返回True,否则返回False
什么是质数?
只能被1和本身整除的数,就是质数
方法:
依次判断num能被(2,num)整除
如果能被其中其中一个数整除,不是质数
当循环结束,都没有发现能被整除的数,那么就是质数
def isPrime(num):
for i in range(2,num):
if num % i == 0:
return False
else:
return True
print([i for i in range(2,101) if isPrime(i)])
案例五:腾讯笔试题
- 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10,程序应该输出结果为2。
(共有两对质数的和为10,分别为(5,5),(3,7),即为:[2,3,5,7]) - 输入描述:
输入包括一个整数n,(3 ≤ n < 1000) - 输出描述:
输出对数 - 示例1:
输入:10
输出:2
def isPrime(num):
for i in range(2,num):
if num % i == 0:
return False
else:
return True
a = int(input('请输入一个正整数num,且3<=num<=1000:'))
unsame = [i for i in range(1,a) if ((isPrime(i) and isPrime(a - i)) and i != a - i)]
same = [i for i in range(1,a) if ((isPrime(i) and isPrime(a - i)) and i == a - i)]
print(unsame)
print(same)
res = len(unsame) // 2 + len(same)
print(res)