1 列表生成式
Python内置的一种极其强大的生成列表 list 的表达式。返回结果必须是列表。
格式:[ 变量表达式 for 变量 in 表达式 if 变量的判断条件(结果为True 或者False)]
使用示例说明列比生成式和使用佛人循环生成列表:
需求1:接收变量:将字符串’20 300 500’ 转化成三个整形数字并且有三个变量接收。
使用循环生成新列表
s = '20 300 500'
#先创建一个空的列表
li = []
#使用for循环将每一个数字追加到空列表中
for i in s.split():
li.append(int(i))
#使用列列表给多个变量赋值
a,b,c=li
print(a,b,c,type(a))
使用列表生成式直接生成列表
s = '20 300 500'
#使用列表生成式直接生成列表:
li = [ int(i) for i in s.split()]
#使用列列表给多个变量赋值
a,b,c=li
print(a,b,c,type(a))
需求2:生成一个列表,列表的元素分别为[11 22 9**9 ]
for循环定义列表
li = []
for k in range(1,10):
li.append(k ** k)
print(li)
列表生成式:
li2 = [ i**i for i in range(1,10)]
print(li2)
效果演示:
[kiosk@foundation31 05 lianxi]$ python3 lianxi.py
[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
找出1~10之间的所有偶数
li = [k for k in range(1,11) if k%2==0] # 列表生成式
#打印列表
print(li)
[2, 4, 6, 8, 10]
s1 = ‘ABC’ s2=‘123’ 输出 A1 A2 A3…C1 C2 C3
s1 = 'ABC'
s2 = '123'
li = [ i+k for i in s1 for k in s2]
print(li)
list1 = [[1,2,3],[4,5,6],[7,8,9]]
将其改变成:li = [1,2,3,4,5,6,7,8,9]
内置函数chain,其参数为任意个序列 返回值为所有序列中的所有元素
#使用列表生成式
list1 = [[1,2,3],[4,5,6],[7,8,9]]
li1 = [ k for i in list1 for k in i ]
print(li1)
#使用内置函数chain,其参数为任意个序列 返回值为所有序列中的所有元素
from itertools import chain # 从哪一个包中安装某一个函数
li2 = list(chain(*list1))
print(li2)
找出1~10之间的所有偶数,
并且返回一个列表(包含以这个偶数为半径的圆的面积)
方案一
import math
square = []
for r in range(2,11,2):
area = math.pi*r**2
square.append(area)
print(square)
方案二
import math
square = [ math.pi*r**2 for r in range(2,11,2)]
print(square)
方案三
import math
def fun(r):
area = math.pi*r**2
return area
print([ fun(r) for r in range(2,11,2)])
找出1~100之间的所有素数
#定义函数 判断一个数字数否为质数
def prime(i):
for k in range(2,i):
if i%k ==0:
return False
else:
return True
#使用列表生成式以及定义好的函数,直接得到所有的素数列表
li = [ r for r in range(2,100) if prime(r)]
print(li)
找出/var/log目录中,所有以.log结尾的文件名或者目录名
import os # 加载os模块 该模块可以实现执行linux系统命令的功能
filename= [ name for name in os.listdir('/var/log') if name.endswith('.log')]
print(filename)
列表的字符串的大写改成小写,不是字符串的去掉
isinstance(变量,数据类型) #判断变量是不是该数据类型,是的话返回Ture,不是返回False
li = ['hello','World',16,67,12.3,False,'Apple']
result = [ s.lower() for s in li if isinstance(s,str)]
print(result)
应用练习:
题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 7**2 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
范例:
输入: 51 5000 10000
输出: 3
#定义函数 计算每一位数字的平方和
def f(n):
sum = 0
while n >0 :
y = n%10
n = n//10
sum += y ** 2
return sum
#列表生成式,将输入的字符串转化成元素为整形数字的列表
in_put = [ int(i) for i in input(':').split() ]
#列表生成式,将满足条件的数字放到一个新的列表中
out_put = [ i for i in range(in_put[1],in_put[2]) if in_put[0] * f(i)== i]
#输出存放满足条件数组的列表长度即可得到满足的个数
print(len(out_put))
题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
输入:
10
输出:
2
#定义函数判断是不是质数
def isprime(x):
for i in range(2,x):
if x%i==0 :
return False
else:
return True
#将比给定的正整数小的所有质数存在列表中
N = int(input('N:'))
small_prime = [ num for num in range(2,N) if isprime(num)]
#将可以相加等于该正整数的质数挑选出来
result = [ prime for prime in small_prime if N - prime in small_prime and prime <=N/2]
#输出得到的指定素数列表的长度 就是统计出的素数对的数量
print(len(result))