列表推导式:是对列表中每个元素进行相同操作,可以代替for循环,使代码简洁
info = ['li', 18, '女']
# 方法一:
new_list = []
for i in info:
str_i = str(i)
new_list.append(str_i)
print(new_list)
# 方法二:
new_list = [str(i) for i in info]
print(new_list)
运行结果:
['li', '18', '女']
['li', '18', '女']
由此可见运行结果是一样滴,但列表推导式方便,简洁,减少代码行
题目:把以下字典分行添加到文件当中
person_info = [ { "name": "vvv", "age": 22, "gender": "男", "hobby": "学习", "motto": "学习使我快乐" }, { "name": "yuze", "age": 20, "gender": "女", "hobby": "拿30K offer", "motto": "下次拿个40K 的" }, ]得到一个 info.txt 的文件:
name,age,gender,hobby,motto vvv,22,男,学习, 学习使我快乐 yuze,20,女,拿30K offer,下次拿个40K 的
第一种方法:(未使用列表推导式)
person_info = [
{
"name": "vvv",
"age": 22,
"gender": "男",
"hobby": "学习",
"motto": "学习使我快乐"
},
{
"name": "yuze",
"age": 20,
"gender": "女",
"hobby": "拿30K offer",
"motto": "下次拿个40K 的"
}
]
# 直接取出第一行的键['name', 'age', 'gender', 'hobby', 'motto']
title = person_info[0].keys()
# 用,分隔转换成字符串name,age,gender,hobby,motto
title_str = ','.join(title)
# 以追加的方式打开info.txt文件
with open('info.txt',mode='a',encoding='utf-8') as f:
# 先把第一行写入
f.write(title_str)
# 取出每行的值
for data in person_info:
row = ''
for value in data.values():
# 因为年龄是整数,所以要先转换成字符串
row = row + str(value) + ','
# 把最后一个,去掉
row = row.strip(',')
f.write('\n')
f.write(row)
第二种方法:(使用列表推导式)
person_info = [
{
"name": "vvv",
"age": 22,
"gender": "男",
"hobby": "学习",
"motto": "学习使我快乐"
},
{
"name": "yuze",
"age": 20,
"gender": "女",
"hobby": "拿30K offer",
"motto": "下次拿个40K 的"
}
]
# 直接取出第一行的键['name', 'age', 'gender', 'hobby', 'motto']
title = person_info[0].keys()
# 用,分隔转换成字符串name,age,gender,hobby,motto
title_str = ','.join(title)
# 以追加的方式打开info.txt文件
with open('info.txt', mode='a', encoding='utf-8') as f:
# 先把第一行写入
f.write(title_str)
# 取出每行的值
for data in person_info:
# 使用列表推导式,把每个值取出来并转换成str
row = [str(value) for value in data.values()]
# 列表转换成字符串,用逗号拼接起来
rows = ','.join(row)
# 因为第24号代码写了一行数据,所以要先加个换行符
f.write('\n')
f.write(rows)
题目:手工创建cases.txt 文件,文件中手工复制 2 行数据:
url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456 url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000请利用上课所学知识,把txt里面的两行内容取出然后保存到一个列表和字典当中:(可定义函数)
[ { 'url':'/futureloan/mvc/api/member/register', 'mobile':'18866668888', 'pwd':'123456' }, { 'url':'/futureloan/mvc/api/member/recharge', 'mobile':'18866668888', 'amount':'1000' } ]
第一种方法:(未使用列表推导式)
with open('cases.txt',encoding='utf-8') as f:
# 读取出的内容是字符串
data = f.read()
# 用换行符转换成列表
lines = data.split('\n')
new_list = []
for line in lines:
new_dict = {}
# 用@转换成新列表['url:/futureloan/mvc/api/member/register', 'mobile:18866668888', 'pwd:123456']
new_line = line.split('@')
for group in new_line:
# 用:转换成最新列表['url','/futureloan/mvc/api/member/register']...
# k,v = group.split(':')代码不容易理解,可以这么写,效果是一样的
# k = group.split(':')[0]
# v = group.split(':')[1]
k,v = group.split(':')
new_dict[k] = v
new_list.append(new_dict)
print(new_list)
第二种方法:(使用列表推导式)
with open('cases.txt',encoding='utf-8') as f:
# 读取出的内容是字符串
data = f.read()
# 用换行符转换成列表
lines = data.split('\n')
new_list = []
for line in lines:
# 用@转换成新列表['url:/futureloan/mvc/api/member/register', 'mobile:18866668888', 'pwd:123456']
new_line = line.split('@')
# 用列表推导式转换成最新列表['url','/futureloan/mvc/api/member/register']...
groups = [group.split(':') for group in new_line]
# 直接将列表转换成字典,列表推导式后得到的groups值是
# groups = [['url', '/futureloan/mvc/api/member/register'], ['mobile', '18866668888'], ['pwd', '123456']]
new_dict = dict(groups)
new_list.append(new_dict)
print(new_list)
由上边的两个例子可以看出来,用列表推导式后代码变少了,显的更简洁了。所以若对列表中每个元素进行相同操作的话就可以使用列表推导式