python—列表生成式

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值