python 的推导式:列表、字典、集合

推导式(comprehensions)

    推导式又称为解析式,可以简单、快速的生成一个新的列表(list)、字典(dict)、集合(set)。推导式也是python的一种特有的属性,包括:

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式

下面让我们一起逐一认识一下推导式的结构。

一、列表推导式

1、使用[]生成list

    基本格式

new_list = [element for element in old_list if element == 3]
# new_list:新生成的列表
# old_list:原始列表
# element:列表元素
# if element == 3  :原始列表元素满足条件生成新生列表元素

例一:生成一个 1-19 之间能够被 3 整除的列表

In [21]: new_list = [element for element in range(1,20) if element % 3 == 0]

In [22]: new_list            
Out[22]: [3, 6, 9, 12, 15, 18] 

例二:生成一个 1-9 的 2 倍数列表

In [23]: new_list = [2 * element for element in range(1,10)]

In [24]: new_list
Out[24]: [2, 4, 6, 8, 10, 12, 14, 16, 18]
例三:列表推导式中调用函数(生成一个 1-9 之间偶数的平方的列表)
In [45]: def square(number):
    ...:     return number * number
 
In [46]: new_list = [ square(element) for element in range (1, 10) if element % 2 == 0]

In [47]: new_list
Out[47]: [4, 16, 36, 64]

2、使用()生成generator

    将列表推导式的[]改成()即可得到生成器。

In [52]: multiples = (i for i in range(30) if i % 3 == 0)

In [53]: multiples
Out[53]: <generator object <genexpr> at 0x00EC13C0>  # 生成一个迭代器

In [54]: for i in multiples:
    ...:     print(i, end = "  ")
0  3  6  9  12  15  18  21  24  27

    注意:range() 和 xrange() 在python 2 中的区别

# range 会直接生成一个 list 对象,
# xrange 则不会直接生成一个 list,而是每次调用返回其中的一个值,xrange 是一个生成器 

二、字典推导式

字典推导和列表推导的使用方法非常相似,区别在于:中括号该改成大括号。

例一:当一个字典的值也为不可变类型且值不存在重复现象时,实现字典的键 值的位置转变

In [58]: old_dict = {"name":"jack", "age":18}

In [59]: new_dict = {value:key for key,value in old_dict.items()}

In [60]: new_dict
Out[60]: {'jack': 'name', 18: 'age'}

例二:字典中的大小写合并为小写并且将大小写的值相加

In [90]: old_dict = {"a": 10, "b": 34, "A": 7, "Z": 3, "B":10}

In [91]: new_dict = {
    ...:     k.lower(): old_dict.get(k.lower(), 0) + old_dict.get(k.upper(), 0)
    ...:     for k in old_dict.keys()
    ...:     if k.lower() in ['a','b']}

In [92]: new_dict
Out[92]: {'a': 17, 'b': 44}

三、集合推导式

它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。

例一:快速生成一个集合

In [101]: {x for x in range(10)}
Out[101]: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

例二:集合推导式使列表变成集合

In [98]: old_list = [1, 4, 1, 5, 2]

In [99]: new_set = {x*2 for x in new_list}

In [100]: new_set
Out[100]: {2, 4, 8, 10}

注:列表和集合的区别:列表使用 [] 列表的元素可以重复、集合使用 {} 集合的元素不可以重复。

猜你喜欢

转载自blog.csdn.net/weixin_42369926/article/details/80907063