列表推导式

列表推导式生成列表对象,语法如下:

1
2
3
[expression for item in iterable]
# 或者
[expression for item in iterable if condition]

其中,expression 是表达式,item 是变量,iterable 是可迭代对象,condition 是条件表达式。
例子:

1
2
3
4
5
6
7
8
9
10
y = [x for x in range(10)]
print(y)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

y = [x for x in range(10) if x % 2 == 0]
print(y)
# [0, 2, 4, 6, 8]

cell = [(row, col) for row in range(1,10) for col in range(1,10)]
print(cell)

字典推导式

字典推导式生成字典对象,语法如下:

1
{key_expression: value_expression for expression in iterable}

其中,key_expression 是字典键的表达式,value_expression 是字典值的表达式,expression 是变量,iterable 是可迭代对象。
类似于列表推导式,字典推导式也可以加入条件表达式、多个for循环。
例子:

1
2
3
4
my_text = "hello world"
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}

集合推导式

集合推导式生成集合对象,语法如下:

1
{expression for item in iterable}

生成器推导式(生成元组)

生成器推导式生成生成器对象,语法如下:

1
(expression for item in iterable)

元组是没有推导式的,但是可以使用生成器推导式生成生成器对象,然后使用 tuple() 函数将生成器对象转换为元组对象。

1
2
3
4
5
6
7
gnt = (x for x in range(10))
print(gnt)
# <generator object <genexpr> at 0x0000013C296578C8>

gnt = (x for x in range(10))
for x in gnt:
print(x,end=',')

注意:一个生成器只能运行一次,第一次迭代可以得到数据,第二次迭代没有数据

1
2
3
4
5
gnt = (x for x in range(10))
print(tuple(gnt))
print(tuple(gnt))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
# ()