##函数中列表生成式与字典生成式##

1.列表生成式

# 需求1:接收变量k a b
s = '51 5000 10000'
# li = []
# for item in s.split():
#     li.append(int(item))
# k,a,b = li
# print(k,a,b)
li = [int(item) for item in s.split()]
print(li)
k, a, b = li
print(k, a, b)
# 需求2:生成一个列表 列表元素分别为[1**1 2**2 #**3...n**n]
# li = []
# for i in range(1,8):
#     li.append(i**i)
# print(li)
li = [i ** i for i in range(1, 8)]
print(li)
li = [i ** i for i in range(1, 8) if i % 2 == 0]
print(li)
# 找出1~10之间的所有偶数
print([i for i in range(1, 11) if i % 2 == 0])
# s1 ='ABC' s2='123'
# A1 A2 A3 B1 B2 B3 C1 C2 C3

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

2.列表生成式变形之for循环

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

[1,2,3,4,5,6,7,8,9]
"""
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)

#print([item2 for item1 in li for item2 in item1])

from itertools import chain
print(list(chain(*li)))

3.列表生成式练习

1. 找出1~10之间的所有偶数,并且返回一个列表(包含以这个偶数为半径的园的面积)
import math
# 方法1
# li = []
# for r in range(2, 11, 2):
#     square = math.pi * r * r
#     li.append(square)
# print(li)
# 方法2
# print([math.pi * r * r for r in range(2, 11, 2)])
# # 方法3
# def square(r):
#     """求以r为半径的圆"""
#     res = math.pi *r *r
#     return res
# print([square(r) for r in range(2,11,2)])
# 找出1~100之间的所有质数(函数+列表生成式)
"""
2. 什么是质数:只能被1和本身整除的书就是质数
判断num是否是质数 如果是质数就返回True 否则返回False
"""
# 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)])

3. 将列表的字符串的大写改成小写,不是字符串的就去掉
# li = ['hello','World',18,12.3,False,'Apple']
# print([s.lower() for s in li if isinstance(s,str)])

4. 找出/var/log目录中,所有以.log结尾的文件名或者目录名
import os
#print(os.listdir('/var/log'))
print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')])

4.字典生成式

# 需求1:假设有20个学生 学生分数在60~100之间,筛选出成绩在90分以上的学生
import random

stuInfo = {}
for i in range(20):
    name = 'westos' + str(i)
    score = random.randint(60, 100)
    stuInfo[name] = score
print(stuInfo)

# highscore = {}
# for name,score in stuInfo.items():
#     if score > 90:
#         highscore[name] = score
# print(highscore)

# print({name:score for name,score in stuInfo.items() if score >90})


# 需求2:将所有的key值变为大写
# d  =dict(a=1,b=2)
# print(d)
# new_d = {}
# for i in d:
#     new_d[i.upper()] = d[i]
# print('key转换为大写的字典:',new_d)
# print({k.upper():v for k,v in d.items()})

# 需求3:大小写key值合并 统一以小写输出
d = dict(a=1, b=2, c=2, B=9, A=10)
# a=11 b=11 c=2
# 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)
print({k.lower(): d.get(k.lower(), 0) + d.get(k.upper(), 0) for k in d})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值