Python列表推导式

 列表推导式:是对列表中每个元素进行相同操作,可以代替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)

由上边的两个例子可以看出来,用列表推导式后代码变少了,显的更简洁了。所以若对列表中每个元素进行相同操作的话就可以使用列表推导式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值