普通列表推导式

格式 : [单个元素的预期值或表达式  for  i in 数据来源]

l1 = [i*2 for i in range(10)]
print(l1)
#等价于以下内容
l2=[]
for i in range(10):
    l2.append(i*2)
print(l2)

过滤的列表推导式

只有if时

格式:[预期表达式 for i in 数据来源 if 判断条件]

l1 = [i*2 for i in range(10) if i%2==0]
print(l1)
#等价于以下内容
l2=[]
for i in range(10):
    if i%2==0:
        l2.append(i*2)
print(l2)

同时存在if else 时

格式: [预期表达式1 if 判断条件 else 预期表达式2 for i in数据来源]

l1 = [i*2 if i%2==0 else i for i in range(10)]
print(l1)

l2=[]
for i in range(10):
    if i%2==0:
        l2.append(i*2)
    else:
        l2.append(i)
print(l2)

多个for 循环推导

格式:[预期表达式  for i in数据来源1 for j in数据来源2]

第一个for循环为外层循环,第二个循环为内层循环

l1 = [f'{j}*{i}={i*j}'  for i in range(1,10) for j in range(1,i+1)]
print(l1)
l2=[]
for i in range(1,10):
    for j in range(1, i + 1):
        l2.append(f'{i}*{j}={i*j}')
print(l2)

嵌套推导

当我们的列表是嵌套格式时,我们需要使用嵌套推导的方式。也就是在多个for循环中,使用括号括起来,以达到嵌套的效果

eg :

matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
#将matrix变成以下内容
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

matrix_new = [[i[j]for i in matrix] for j in range(4)]
print(matrix_new)

matrix_new1=[]
for j in range(4):
    n = []
    for i in matrix:
        n.append(i[j])
    matrix_new1.append(n)
print(matrix_new1)
attributes = ['name', 'dob', 'gender']
values = [['jason', '2000-01-01', 'male'],
['mike', '1999-01-01', 'male'],
['nancy', '2001-02-01', 'female']
]
# expected outout:
[{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'},
{'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'},
{'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}]

# list = [dict(zip(attributes, value)) for value in values]
list= [dict((k1,v1[k])for k,k1 in enumerate(attributes)) for v,v1 in enumerate(values)]
l=[]
for v,v1 in enumerate(values):
    dict={}
    for k, k1 in enumerate(attributes):
        dict.update({k1:v1[k]})
    l.append(dict)

 

posted on 2021-12-13 00:17  木木-林  阅读(155)  评论(0编辑  收藏  举报