python:列表推导式

python中有种独特的语法:推导式,可以将代码压缩到1行,但是不使用也不影响。

有三种:列表、字典、集合(注意没有元组推导式)

列表推导式

# 1、一行代码实现1—100之和(知识点:列表推导式)
print(sum([x for x in range(1, 101)]))
# 解释:
# 列表推导式语句用[]包围,[]中先执行for循环语句,将每次循环取得的值再执行for语句之前的表达式,然后将结果放入列表中,相当于如下语句
li = []
for x in range(1, 101):
    li.append(x)
print(li)
print(sum(li))
# 列表推导式还支持更复杂的语句,核心是用[]将生成列表的逻辑封装起来
# 求1-100之内能被4整除,但是不能被5整除的所有数
print([x for x in range(1, 101) if x % 4 == 0 and x % 5 != 0])
# 多重循环,先执行一次外层循环,再循环内层遍历所有元素
li = [a + b for a in '123' for b in 'abc']
# 输出
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']

# 更多用法
li2 = [k+':'+v for k, v in {'name': 'kobe', 'age': '41'}.items()]
# 输出
['age:41', 'name:kobe']

# 问题:有两个列表a和b,找出在a中但不在b中的元素(a有b没有),在a和b中都存在的元素(ab都有),a和b中不同的元素(a有b没有,b有a没有)
a = [1, 2, 3, 4, 5]
b = [3, 4, 5, 6, 7]
# 在a中但不在b中的元素(a有b没有)
li1 = [x for x in a if x not in b]
print(li1)
# 在a和b中都存在的元素(ab都有)
li2 = [x for x in a if x in b]
print(li2)
# a和b中不同的元素(a有b没有,b有a没有)
li3 = [x for x in a+b if x not in li2]
print(li3)

 

 

字典推导式

# 字典推导式(用花括号{}包围起来)
dict = {x: x*x for x in [1, 2, 3]}
# 输出
{1: 1, 2: 4, 3: 9}

 

集合推导式

# 集合推导式(也是用花括号包围,和字典推导式区别只是在for语句的前面表达式不一样,没有:)
s = {x for x in 'agjsgnjkjg' if x not in 'sgjkajhag'}
print(type(s))

 

元素推导式(没有)

# 元组推导式????(既然列表推导式用[],字典和集合推导式用{},那元组推导式当然用()了)
# 对不起么有元组推导式,圆括号在Python中被用作生成器的语法了
tup = (x for x in [1,2,3])
print(type(tup))
# 输出:<class 'generator'>,可以看到是一个生成器
# 如果非要按照上面的规律生成元组,需要显式的调用元组转换函数tuple()
tup = tuple((x for x in [1,2,3]))
print(tup)
print(type(tup))
# 输出:
# (1, 2, 3)
# <class 'tuple'>

 

转载于:https://www.cnblogs.com/gcgc/p/11589186.html