1.列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
实例1:
要求生成一个列表,列表元素分别为[11,22…9**9]
若使用循环写:
li = []
for i in range(1, 10):
li.append(i ** i)
print(li)
使用列表生成式可以达到同样的效果且代码更加简单:
print([i**i for i in range(1,10)])
实例2:
要求找出1~10之间的所有偶数
使用列表生成式:
print([i for i in range(1,10) if i % 2 ==0])
#输出:
[2, 4, 6, 8, 10]
实例3:
使用列表生成式实现字符串的拼接:
s1 = 'ABC'
s2 = '123'
print([i + j for i in s1 for j in s2])
输出:
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
2.列表生成式之for循环
初始方法:
li =[
[1,2,3],
[4,5,6],
[7,8,9]
]
resli = []
for item1 in li: # [1,2,3] [4,5,6] [7,8,9]
for item2 in item1:
resli.append(item2)
print(resli)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表生成式之for循环
print([item2 for item1 in li for item2 in item1])
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
import itertools
print(list(itertools.chain(*li)))
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
eg2: 找出1~10之间的所有偶数 并返回一个列表(包含以这个偶数为半径的圆的面积)
方法一:
import math
#print(math.pi)
li = []
for i in range(2, 11, 2):
square = math.pi * i * i
li.append(square)
print(li)
方法2:
print([math.pi * i * i for i in range(2, 11, 2)])
方法3:
def square(r):
"""
求以r为半径的园的面积
:return:
"""
res = math.pi*r*r
return res
print([square(i) for i in range(2,11,2)])
eg:练习题:
题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 72 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
输入:
第一行包含3个正整数k,a, b, k>=1, a,b<=1018, a<=b;
输出:
输出对应的答案;
范例:
输入: 51 5000 10000
输出: 3
```bash
def f(n):
# 1.把数字转换成字符串
n = str(n)
# 2.计算字符串中的每个数的平方
sum = 0
for item in n:
sum += int(item) **2
return sum
# 1.接收变量 k a b
s = input('')
li = []
for item in s.split():
li.append(int(item))
k,a,b = li
# 2.进行判断是否满足条件
count = 0
for i in range(a,b+1):
if k * f(i) == i:
count += 1
print(count)
eg2
- 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,
并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。
(共有两对质数的和为10,分别为(5,5),(3,7))
#[2,3,5,7] - 输入描述:
输入包括一个整数n,(3 ≤ n < 1000) - 输出描述:
输出对数 - 示例1 :
输入:
10
输出:
2
#1.输入
num = int(input('N:'))
# 2.判断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)]
#print(primeli)
"""
1.先从列表中拿出两个数
2.判断两个数之和是否等于num
"""
primelicount = 0
# for item1 in primeli:
# for item2 in primeli:
# if item1 + item2 == num and item1 <= item2:
# primelicount += 1
# print(primelicount)
# [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:
primelicount += 1
print(primelicount)