python 列表生成器简单案例

场景一

将文件中逐行读取的一个完整语句,按逗号分割单词,去掉首位的空字符,并过滤掉长度小于 3 的单词,最后返回由单词组成的列表。

1
2
3
text = " today,  is , sunday"
text_list = [s.strip() for s in text.split(',') if len(s.strip()) > 3]
print(text_list) # out:['today', 'sunday']

场景二

给定下面两个列表 attributes 和 values,要求针对 values 中每一组子列表 value,输出其和 attributes 中的键对应后的字典,最后返回字典组成的列表。分别用一行代码和多行代码来写。

1
2
3
4
5
6
7
8
9
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'}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 多行代码
l1 = []
for value in values:
dict1 = {}
for i, attr in enumerate(attributes):
dict1[attr] = value[i]
l1.append(dict1)

l2 = []
for value in values:
dict1 = dict(zip(attributes, value))
l2.append(dict1)

# 一行代码
l3 = [{attr: value[i] for i, attr in enumerate(attributes)} for value in values ]

l4 = [dict(zip(attributes, value)) for value in values]

print(l1 == l2 == l3 == l4)
# out: True