Python之列表生成式

需求1:接收变量 k a b

s = '51 5000 10000'
a = s.split()
print(a)
li = []
for item in s.split():
    li.append(int(item))
print(li)
k,a,b = li
print(k,a,b)

['51', '5000', '10000']
[51, 5000, 10000]
51 5000 10000

===========将for语句改为列表生成式============

li = [int(item) for item in s.split()]
print(li)
k, a, b = li
print(k, a, b)
[51, 5000, 10000]
51 5000 10000

需求2:生成一个列表,列表的元素分别为[ 1 ** 1 2 ** 2 9 ** 9 ]

li = []
for i in range(1, 10):
    li.append(i ** i)
print(li)
[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
=============将for语句改为列表生成式============
print([i ** i for i in range(1, 10)])
[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
print([i ** i for i in range(1, 10) if i % 2 == 0])
[4, 256, 46656, 16777216]

需求3: 找出1~10之间的所有偶数

print([i for i in range(0,11,2) ])
[0, 2, 4, 6, 8, 10]

需求4:s1 = ‘ABC’ s2=‘123’ 输出:A1 B2 C3

s1='ABC'
s2='123'
y=(zip(s1,s2))
for i in y:
    print(''.join(i),end=' ')
['A1', 'B2', 'C3']

print([''.join(i) for i in y ])
['A1', 'B2', 'C3']

需求5:s1=‘ABC’ s2=‘123’ 输出:A1 A2 A3 B1 B2 B3 C1 C2 C3

s1='ABC'
s2='123'
print([i + j for i in 'ABC' for j in '123'])

['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

需求6:将嵌套列表去嵌套,变成一个列表

[
[1,2,3],
[4,5,6], ---------------->[1,2,3,4,5,6,7,8,9]
[7,8,9]
]

li = [
[1,2,3],
[4,5,6],
[7,8,9]
]
resli = []
for i in li:  
    for j in i:
        resli.append(j)
print(resli)
================改为列表生成式============
print([j for i in li for j in i])
====chain()可以把一组迭代对象串联起来,形成一个更大的迭代器=====
from itertools import chain
print(list(chain(*li)))
--------------------------练习------------------------------

找出1~10之间的所有偶数,
并且返回一个列表(包含以这个偶数为半径的园的面积)

import math
#方法1:
li = []
for r in range(2, 11, 2):
    li.append(math.pi * r * r)
print(li)

#方法2:
print([math.pi * r * r for r in range(2, 11, 2)])

#方法3:
def square(r):
    """
    求以r为半径的圆
    :param r:半径
    :return:
    """
    res = math.pi * r * r
    return res
    
print([square(i) for i in range(2,11,2)])

#找出1~100之间的所有素数 (列表生成式 + 函数)

def isPrime(num):
    for i in range(2,num):
        if num % i == 0:
            return False
    else:
        return True
        
print([i for i in range(2,101) if isPrime(i)])
------------------练习-------------------
题目需求:
    对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10  
    f(207) = 2**2 + 0**2 + 7**2 = 53
    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n 
    输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b; 
    输出:
    输出对应的答案;

范例:
    输入: 51 5000 10000
    输出: 3
def f(n):
    a=0
    m=str(n)
    for i in m:
        a += int(i) ** 2
    return a
three=input('请输入三个整数,并用空格隔开:')
threes=three.split(' ')
x=int(threes[0])
y=int(threes[1])
z=int(threes[2])
sum=0
if x>=1 and y<=z<=10**18 :
    for i in range(y,z+1):
        if x*f(i)==i :
            sum+=1
    print(sum)
else:
    print('请重新输入数据!!')
-----------------------练习----------------------

(2018-腾讯-在线编程题)

  • 题目描述:
    给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
    如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
  • 输入描述:
    输入包括一个整数n,(3 ≤ n < 1000)
  • 输出描述:
    输出对数
  • 示例1 :
    输入:
    10
    输出:
    2
def sushu(n):
    for i in range(2,n):
        if n%i==0:
            return False
    else:
        return True
def add(n):
    sum=0
    for i in range(2,int(n/2)+1):
        if sushu(i) and sushu(n-i):
            sum+=1
    return sum

nmb=int(input('请输入一个小于1000的正整数:'))
print(add(nmb))
# num = int(input('N:'))
# # 1.判断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,101) if isPrime(i)]
# print(primeli)
#
# # 判断素数列表 primeli中有多少个素数等于num
# primePairCount  = 0
#
# """
# 1.先从列表中拿出两个数
# 2.判断两个数之和是否等于num
# """
# # for item1 in primeli:
# #     for item2 in primeli:
# #         if item1 + item2 == num and item1 <= item2:
# #             primePairCount += 1
# # print(primePairCount)
#
# # [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:
#         primePairCount += 1
# print(primePairCount)
---------------------练习---------------------

列表的字符串的大写改成小写,不是字符串的去掉

 li = ['hello','World',16,67,12.3,False,'Apple']
 print([s.lower() for s in li if isinstance(s,str)])
 ----------------OR----------------------
 print([s.lower for s in li if type(s)==str])
-----------------------练习-----------------------

找出/var/log目录中,所有以.log结尾的文件名或者目录名

import os
print(os.listdir('/var/log'))
#print(os.system('pwd'))
print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')])
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值