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