python|推导式

一、python推导式

1.1 列表推导式

# 列表推导式:简便
result = [i*i for i in range(20) if i % 3]
# 原始写法
tmp = []
for i in range(20):
    if i % 3:
        tmp.append(i*i)
print(result)
print(tmp)

#使用列表推导式输出200以内,开平方是整数的数
# 方法一
result = [x*x for x in range(15) if 0<=x*x<200]
print(result)
# 方法二
import math
result2 = [x for x in range(200) if math.sqrt(x).is_integer()]
print(result2)
# 方法三
result3 = [x for x in range(200) if math.sqrt(x)%1 == 0]
print(result3)

# 对列表中的数,取两位小数
lst = [2.45345, 4.3454325, 9, 82.234324, 9.841234]
result3 = [round(x,2) for x in lst]
print(result3)
result4 = [float('%.2f' %x) for x in lst]
print(result4)

##### 嵌套推导式
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
         ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva', 'Elven']]
# 常规写法
tmp = []
for lst in names:
    for name in lst:
        if name.lower().count('e')>=2:
            tmp.append(name)
print(tmp)
# 嵌套推导式写法
result = [name for lst in names for name in lst if name.lower().count('e')>=2]
print(result)

# 集合推导式 --》 去重
str1 = "safefjlajfdknjdvnefdlas"
print(set(str1))
print( {i for i in str1} )

#****
# 列表和集合的区别:集合天生去重、无序、集合里面的数据是可哈希对象(不可变数据类型)
# 列表:有序,可以包含任何类型的对象

练习

a = [1,2,3,4,5,6,7]
#求列表a中的奇数项,以及奇数项的平方
b = [x for x in a if x %2 == 1]
c = [x**2 for x in a if x %2 == 1]
print(b,c)
#[1, 3, 5, 7] [1, 9, 25, 49]

# 打印30以内能被整除3的数
d = [x for x in range(1,31) if x%3 == 0]
print(d)
# [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

#打印含有两个e的名字
names = [['aee','dc','ert','css','see'],
['sv','sr','bee']]
print([name for lst in names for name in lst if name.count('e')==2])
# ['aee', 'see', 'bee']

#过滤50以内能被3整除的数,如果这个数是奇数就返回0,如果是偶数就返回这个数本身
print([num if num%2==0 else 0 for num in range(1,51) if num%3==0])
#[0, 6, 0, 12, 0, 18, 0, 24, 0, 30, 0, 36, 0, 42, 0, 48]

1.2 字典推导式

#统计目录随即字符串中每个字符出现的次数
str2 = "affijkafjfiojaoeafk"
result = {l:str2.count(l) for l in set(str2) }
print(result)
# {'i': 2, 'f': 5, 'j': 3, 'o': 2, 'a': 4, 'e': 1, 'k': 2}
tmp = {}
for i in str2:
    tmp[i] = tmp.get(i,0) + 1  #下面的写法都可以改为这种简便形式
    # if i in tmp:
    #     tmp[i] += 1
    # else:
    #     tmp[i] = 1

#交换字典的key值和value值
d1 =  {'a':1,'b':2,'c':1}
d2 = {v:k for k,v in d1.items()}
print(d2)
#{1: 'c', 2: 'b'}

#合并大小写对应的value值,将k统一换成小写
q4 = {'B':3,'a':1,'b':6,'c':3,'A':4}
q5 = {k.lower():q4.get(k.lower(),0)+q4.get(k.upper(),0) for k,v in q4.items()}
print(q5)
# {'b': 9, 'a': 5, 'c': 3}

1.3 集合推导式

和列表推导式一致,只不过使用=={}==

并且天生去重

#打印lst中数据的平方,且数据不能重复
lst = [-1,1,2,1]
s1 = {i*i for i in lst}
print(s1)
#{1, 4}

练习

# 过滤掉长度小于3的字符串列表,并将剩下的转成大写字母
q1 = ['a','ab','abc','abcd','abcde']
q = [x.upper() for x in q1 if len(x) >= 3]
print(q)
#['ABC', 'ABCD', 'ABCDE']

#求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表
# [(0,1),(0,3),(0,5),(2,1),(2,3)...]
result = [(x,y) for x in range(0,6) if x%2==0 for y in range(0,6)  if y%2==1]
print(result)
#[(0, 1), (0, 3), (0, 5), (2, 1), (2, 3), (2, 5), (4, 1), (4, 3), (4, 5)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值