python 3 基础之各种推导式(列表、字典、集合)

1、列表推导式

1.1、普通列表推导式

用于快速创建一个有规律的列表,如下代码:

my_list = [i * i for i in range(1, 10)]

print(my_list)

========================
运行结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]

相当于以下代码

my_list = []
for i in range(1,10):
    my_list.append(i * i)
print(my_list)

代码理解:先将执行for循环,然后将每个 i 代入表达式   i * i 中,将运算结果循环添加到空列表中,得到最终结果

1.2、增加条件语句和多个循环

增加条件语句

推导式创建1~50之间偶数的列表

# 列表推导式创建一个1~50之间的偶数列表
my_list = [i for i in range(1,51) if i % 2 == 0]
print(my_list)

运行结果:[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]

==================================================

# 非推导式创建
my_list = []
# for循环
for i in range(1,51):
    if i % 2 == 0:
        my_list.append(i)
print(my_list)
# 跟上面代码运行结果一致

循环循环嵌套

# 列表推导式创建for循环嵌套的列表
my_list = [a + b for a in ‘123‘ for b in ‘abc‘]
print(my_list)

===================================================

# 非推导式创建列表
my_list1 = []
for a in ‘123‘:
    for b in ‘abc‘:
        my_list1.append(a + b)
print(my_list1)

# 两者运行结果一样:[‘1a‘, ‘1b‘, ‘1c‘, ‘2a‘, ‘2b‘, ‘2c‘, ‘3a‘, ‘3b‘, ‘3c‘]

2、字典推导式

相对于列表,看冒号两边,一边属于字典的key ,一边是字典的value

# 字典用推导式创建
dic = {x: x ** 2 for x in (2, 4, 6)}
print(dic)
# 非推导式创建
dict = {}
for x in (2,4,6):
    dict[x] = x ** 2
print(dict)

====================================
两段代码运行结果一致:{2: 4, 4: 16, 6: 36}

3、集合推导式

创建一个空集合用 set(),因为  {}  是创建的空字典

# 推导式创建集合
a = {x for x in ‘abracadabra‘ if x not in ‘abc‘}
print(a)
# 非推导式创建集合
b = set()
for x in ‘abracadabra‘:
    if x not in ‘abc‘:
        b.add(x)
print(b)

===========================================
运行结果两段代码一致:{‘r‘, ‘d‘}

推导式没有元组,圆括号在Python中被用作生成器的语法

要通过类似方法生成元组,需要显式调用元组的类型转换函数tuple(),如下:

tup = tuple(x for x in range(9))
print(tup)
print(type(tup))

------------------------
结果:
(0, 1, 2, 3, 4, 5, 6, 7, 8)
<class ‘tuple‘>