2022年 11月 3日

Python之生成式

1.集合的生成式

一般格式:
        { 表达式 for i in 集合序列 if ...}
  • 1
  • 2

(1).将集合中的每一个元素分别平方

# 此时输出的是一个对象
print(i ** 2 for i in {1,2,3,3})
# {}:转换为集合,集合会自动去重
print({i ** 2 for i in {1,2,3,3}})
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
(2).将集合中是3的倍数的所有元素分别平方

print({i ** 2 for i in {1,2,3,9,12,9} if i % 3 == 0})
  • 1

在这里插入图片描述
2.列表的生成式

一般格式:
	    [表达式 for i in 列表序列 if ...]
  • 1
  • 2

(1).找出1-10之间的所有偶数, 并返回一个以这个偶数为半径的圆面积的列表

# 导入math模块,用于输入pi
import math

# format: 格式转换,将pi保留两位小数
print(float(format(math.pi,'.2f')))

# 列表生成式
# 方法1:
print([float(format(math.pi,'.2f')) * i ** 2  for i in range(1,11) if i % 2 == 0])
# 方法2:
print([float(format(math.pi,'.2f')) * i ** 2  for i in range(2,11,2)])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述
(2).找出1-100之间的质数(只能被自己和1整除的数)

注意: 1不是质数
  • 1
# 1)普通方法:
# for i in range(2,101):
#     for j in range(2, i):
#         if i % j == 0:
#             break
#     else:
#         print(i)

# 2)列表生成式:
# 定义函数,判断是否为质数
def isPrime(i):
    for j in range(2,i):
        if i % j == 0:
            return False
    else:
        return True
# 列表生成式
print([i for i in range(2,101) if isPrime(i)])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述
示例1:

题目描述:

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

输入描述:
  输入包括一个整数n,(3 ≤ n < 1000)
输出描述:
  输出对数

示例1:
    输入:
        10
    输出:
        2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

代码:(方法1)

# 1.接收用户输入
n = int(input())

# 2.判断是否为质数
def primefun(i):
    for j in range(2,i):
        if i % j == 0:
            return False
    else:
        return True

# 3.找到n以内的所有质数并存储在列表中
primeli = [i for i in range(2,n) if primefun(i)]

# 4.统计满足条件的个数

# 定义计数器
count = 0

# 遍历n以内的所有质数;两个for循环便可以得到两个数
for i in primeli:
    for j in primeli:
        # 注意:如果不定义i与j的大小,10=3+7=7+3便会记为两次
        if i+j == n and i<=j:
            # print(i,j)
            # print('%s = %s + %s' % (n,i,j))
            count += 1
# 输出个数
print(count)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

运行结果:
在这里插入图片描述
代码:(方法2)

# 1.接收用户输入
n = int(input())

# 2.判断是否为质数
def primefun(i):
    for j in range(2,i):
        if i % j == 0:
            return False
    else:
        return True

# 3.找到n以内的所有质数并存储在列表中
primeli = [i for i in range(2,n) if primefun(i)]

# 4.统计满足条件的个数

# 先确定第一个数a,再判断n-a=b是否在列表中,即可判断n=a+b
# [2,3,5,7]  # 2  10-2=8

primecount = 0
# 遍历n以内的所有质数
for item in primeli:
    if (n - item) in primeli and item <= n - item:
        primecount +=1
# 输出个数
print(primecount)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

运行结果:
在这里插入图片描述
3.字典的生成式

一般格式:
		{表达式 for i in 字典序列 if ...}
  • 1
  • 2

(1).将字典: {‘a’:1,‘b’:2} —-> {‘A’:1,‘B’:2}

一般方法:

# 工厂函数的方式,定义字典
d = dict(a=1,b=2)
print(d)

# 定义空字典,用来接收转换key值后的值
new_d = {}
# 遍历旧字典的key值
for i in d:
    # d[i]:字典的key对应的value值
    # print(d[i])
    new_d[i.upper()] = d[i]

print('key转化为大写的字典:',new_d)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述
字典生成式:

# 工厂函数的方式,定义字典
d = dict(a=1,b=2)
print(d)

# 字典生成式
print({k.upper():v for k,v in d.items()})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
(2).将字典: {‘a’:2,‘b’:1,‘c’:2,‘B’:9,‘A’:10} —> {‘a’:12,‘b’:10,‘c’:2}

一般方法:

# 工厂函数的方式,定义字典
d = dict(a=2,b=1,c=2,B=9,A=10)
print(d)

# 定义空字典
new_d={}

# 遍历字典中的所有元素
for k,v in d.items():
    low_k = k.lower()
    # 合并
    if low_k not in new_d:
        new_d[low_k] = v
    else:
        new_d[low_k] += v

print(new_d)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述
字典生成式:

d = dict(a=2,b=1,c=2,B=9,A=10)
print(d)

# key:val, get方法:获取指定key对应的value值  
print({k.lower():d.get(k.lower(),0)+d.get(k.upper(),0) for k in d})
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述