列表生成式 && 字典生成式

什么时候改用列表生成式和字典生成式呢?(自我归纳)
两个生成式都是起到简化代码的作用,而且是简化很多;当我们在已有列表或字典的基础上想要生成新的列表时

1.列表生成式

1.1单循环列表生成式

例1:生成列表元素分别为[11 22 33…99]

import math

li = []
for i in range(1, 10):
    li.append(i ** i)
print(li)

print([i ** i for i in range(1, 10)])
print([i ** i for i in range(1, 10) if i % 2 == 0])

1.2 单循环判断列表生成式

例2:找出1~10之间的所有偶数

print([i for i in range(1, 11) if i % 2 == 0])

1.3 双重循环列表生成式

例3: S1=‘ABC’ S2=‘123’ A1 A2 A3. 将s1与s2排列组合.

print([i + j for i in 'ABC' for j in '123'])

1.4 函数返回列表生成式

例4:找出1~10之间的所有偶数.并且返回一个列表(包含以这个偶数为半径的园的面积)

import math
# print(math.pi)
# 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):
    res = math.pi * r * r
    return res
print([square(i) for i in range(2,11,2)])

例5:找出1~100之间的所有素数(函数+列表生成式)

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)])

例6:列表的字符串的大写改成小写,不是字符串的去掉

li = ['hello','Wrold',16,17,18,12.3,False,'Apple']
ss=[s for s in li if isinstance(s,str)]
l=[]
for j  in  ss:
   l.append(j.upper())
else:
    print(l)

例7:找出/var/log目录中,所有以.log结尾的文件名或者目录名

import os
print(os.listdir('/var/log'))
print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')])

例8:有一个整数列表(10个元素),要求调整元素的顺序
把奇数放在前面 偶数放在后面

import random
li=[random.randint(1,50)for i in range(15)]
print(li)
l=sorted(li,key=lambda x:3 if x%2==0 else 2)
print(l)

例9:(2018-腾讯-在线编程题)

- 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

- 输入描述:
输入包括一个整数n,(3 ≤ n < 1000)
- 输出描述:
输出对数
- 示例1 :
输入:
    10
输出:
    2

num = int(input(‘N:’))

#1.判断2~num之间有多个少质数
def isprime(num):
    for i in range(2,num):
        if num % i == 0:
            return False
    else:
            return True
primeli = [i for i in range(2,1000) if isprime(i)]

# 判断素数列表中有多少个素数等于num
primepaircount = 0

"""
1.先从列表中拿出两个数
2.判断两个数之和是否等于num
"""
for item1 in primeli:
    for item2 in primeli:
        if item1 + item2 ==num and item1 <= item2:
            primepaircount += 1
print(primepaircount)
[2,3,5,7] 2== 10-2 3==10-3 5 ==10-5 7 ==10-7

for item1 in primeli:
    if (num - item1) in primeli and item1 <= num -item1:
        primepaircount += 1
print(primepaircount)

2.字典生成式

例1:假设有20个学生,学生的分数在60~100之间,筛选出成绩在90
分以上的学生

import random
student={}
for i in range(20):
    student['westos'+str(i)]=random.randint(60,100)
print(student)
print({ j:v  for j,v in student.items() if v>90})

例2:将所有的key值都变成大写

d=dict(a=1,b=2)
new={}
for i in d:
    new[i.upper()]=d[i]
print(new)
print({i.upper():d[i]  for i in d })

例3:大小写的key值合并,统一以小写输出

dd=dict(a=1,b=3,A=2,B=2)
newdd={}
for i in dd:
    if i.lower() in newdd:
        newdd[i.lower()]+=dd[i]
    else:
        newdd[i.lower()]=dd[i]
print(newdd)
print({ i.lower():dd.get(i.upper(),0)+dd.get(i.lower(),0 ) for i in dd })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值