Python解析式

目录

    • 目录
    • 一、列表解析式
    • 二、字典解析式
    • 三、集合解析式

一、列表解析式

列表解析(list comprehension)提供了一种优雅的生成列表的方法,能用一行代码代替十几行代码,而且不损失任何可读性。而且比起使用map和lambda表达式,性能还快很多

如将整数列表转换为bool列表

lst = [123,453,-546,23,-646,1,245,4363,112,9,0,2,-12]

# 一般实现方式
tmp = []
for x in lst:
    if x > 0:
        tmp.append(1)
    else:
        tmp.append(0)

# map实现
def func(x):
    if x > 0:
        return 1
    else:
        return 0
tmp = list(map(func, lst))

# 列表解析式实现
tmp = [1 if x > 0 else 0 for x in lst ]

提取出字符串里的所有单词的首字母

text = 'My name is TangHao'
tmp = [word[0] for word in text.split()]

获取一个全为’tang’的列表

lst = ['tang' for i in range(10)]

获取两个列表对应元素的乘积

lst1 = [1,2,3]
lst2 = [4,5,6]
lst = [x*y for x,y in zip(lst1,lst2)]

解开嵌套列表使其变为普通列表

lst = [[1,2,3],[2,5],[26,7],[3,7,8,9]]
result = [x for i in lst for x in i]

求所有可能的组合

from itertools import product
x=['a','b','c']
results = ["".join(i) for i in product(x, repeat=3)]

二、字典解析式

与列表解析式类似,字典解析式的第一部分是一个键值对

dic = {'tang':20, 'wang':18, 'meng':15}
d = {k:v for k,v in dic.items() if v > 18}

三、集合解析式

集合解析式和列表解析式很类似,就是需要把列表解析式的中括号换为大括号

lst = [1,2,3,4,5,6,6,6,7,8]
st = {x for x in lst if x > 3}

你可能感兴趣的:(python)