python - 列表生成器

格式:
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)

猜你喜欢

转载自blog.csdn.net/weixin_43067754/article/details/84843421