格式:
li = [experssion for item in 序列 if 判断语句]
下面给出几个例子理解,列表生成器是python的高端写法。
# 1.接收k,a,b
s = '51 5000 10000'
k,a,b = [int(item) for item in s.split()]
print(k,a,b)
# 2. 生成一个列表,列表元素分别为[1**1,2**2,3**3,4**4,...n**n]
li = [i**i for i in range(1,8)]
#3.找出1~10之间所有偶数
# s = [i for i in range(1,11) if i%2==0]
# print(s)
#4.1~1000之间所有质数
def isPrime(num):
for i in range(2,num):
if num%i == 0:
return False
else:
return True
s = [i for i in range(2,1001) if isPrime(i)]
print(s)
#5.s1='ABC' s2='123'--->输出'A1','B2','C3'
s1 = 'ABC'
s2 = '123'
print([i + j for i in s1 for j in s2])
需求:将3x3的矩阵转换成一堆数组
[
[1,2,3],
[4,5,6],
[7,8,9]
]
输出:
[1,2,3,4,5,6,7,8,9]
方法一:
for 循环
li = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
resli = []
# [1,2,3],[4,5,6],[7,8,9]
for item1 in li:
for item2 in item1:
resli.append(item2)
print(resli)
方法二:
列表生成式
print([item2 for item1 in li for item2 in item1])
方法三:
解包
from itertools import chain
print(list(chain(*li))) #必须转化为list
# 将列表中所有内容都变成小写
li = ['dasdaFSDFSFDSF','dadDSADSAsdaDASsadas']
print([i.lower() for i in li])
找出/var/log目录中,所有以.log结尾的文件名或者目录名
import os
#print(os.listdir('/var/log'))
# 可以测试一下os的功能,列出/var/log中的所有文件
print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')])
9.腾讯笔试题
2018-腾讯-在线编程题)
- 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
#[2,3,5,7]
-
输入描述:
输入包括一个整数n,(3 ≤ n < 1000) -
输出描述:
输出对数 -
示例1 :
输入:
10
输出:
2
# 先输出3-1000中所有质数
n = int(input('请输入n(3 <= n <1000):'))
def isPrime(num):
for i in range(2,num):
if num%i == 0:
return False
else:
return True
s = [i for i in range(3,n) if isPrime(i)]
#1.自己的思路
b = 0
for i in s:
# 遍历质数例如:i = 3 5 7...
for a in s:
# 在i=1时,再遍历指数并且赋予a = 3,5,7,9,
if n == a + i and i <= a:
#判断输入的n是否满足两个质数相加,并且为了排除重复(3,7)(7,3)所以需要第一个质数小于第二个质数
print(i,a)
b += 1
print(b)
#2.老师的思路,只需要判断一步
count = 0
for i in s:
# 直接判断 输入n - 质数i 是否在质数列表s里 ,
# 并且为了排重 (3,7)(7,3),所以要让第一个数i小于等于第二个数n-i
if (n - i) in s and (i <= n-i) :
count += 1
print(count)