Python学习之路---列表推导式、生成器表达式、其他推导式

列表推导式

格式:变量名 = [循环的变量名(i) for 循环语句]

test_list = ['这是第%s个数字'%i for i in rang(10)]
print(test_list)

#等同于下面的代码
for i in range(10)
    print('这是第%s个数字'%i)

生成器表达式

格式:变量名 = (循环的值(i) for循环语句)

注意:

1、和列表推导式的区别是"[]"  和 "()"

2、变量的返回值不一样,生成器表达式返回的值是生成器

3、比列表推导式更省内存空间,几乎不占内存

4、缺陷是无法直观的看到内部的值

g = (i for i in rang(10))  # 获取到的是一个生成器
foi i in g:
    print(i)

# 等同于下面代码
def gen():
    for i in rang(10):
        yield i
g=gen()
for i in g:
    print(i)

各种推导式:注:没有元组推导式,因为如果使用了()就变成了生成器列表器

注意:写法都是一样的,仅是包围的括号不一样

列表推导式

格式:l = [每个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型]----遍历所有元素

完整的推导式:l = [满足条件的元素相关操作 for 元素 in可迭代数据类型 if 元素相关的条件]-----筛选元素

# 30 以内所有能被3整除的数
l = [i for i in range(30) if i%3 == 0]
for i in l:
    print(i)
# 等同于以下代码    
for i in range(30):
    if i%3 == 0 :
        print(i)

进阶:循环取嵌套列表中的值

#例子:找到嵌套列表中名字含有两个‘e’的所有名字
ls = [['eae','egg','eee'],['eeg','e','ee']]
for i in ls:
    for ii in i:
        if ii.count('e')>=2:
            print(ii)
#列表推导式:先循环最外面的列表,再循环里面的小列表,就算是三层嵌套也一样
l = [ii for i in ls for ii in i if ii.count('e')>=2 ]
print(l)

字典推导式

# 对调一个字典的key和value值
dic  = {'a':10,'b':20}
for k in dic:
    print(dic[k])
    print(dic[k]:k)  # dic[k]获取到的是字典里的Value

print(dic)

#字典推导式

dic = {dic[k]:k for k in dic}

#合并大小写对应的value值,将k统一成小写
dic = {'a':1,'b':2,'c':3,'A':1,'C':3}
#题意解析:大小写相同的key对应的Value值相加,然后将Key统一成小写

for k in dic:
    print({k.lower():dic.get(k.lower(),0)+dic.get(k.upper(),0)})
#字典推导式
dic = {k.lower():dic.get(k.lower(),0)+dic.get(k.upper(),0) for k in dic}
print(dic)

集合推导式: 自带结果去重功能

#例:计算列表中每个值的平方
test = {x**2 for x in [1,-1,2]}
print(test)

猜你喜欢

转载自blog.csdn.net/chengyinman0078/article/details/86763713