6.python3实用编程技巧进阶(一)

1.1.如何在列表中根据条件筛选数据

# 1.1.如何在列表中根据条件筛选数据

data = [-1, 2, 3, -4, 5]

#筛选出data列表中大于等于零的数据
#第一种方法,不推荐
res1 = []
for x in data:
    if x >= 0:
        res1.append(x)

print(res1)

#第二种用列表解析,推荐使用
res2 = [ x for x in data if x >= 0]
print(res2)

#第三种用filter函数
res3 = list(filter(lambda x : x>= 0,data))
print(res3)

1.2.如何在列表中根据条件筛选数据

# 1.2.如何在列表中根据条件筛选数据

from random import randint

#创建学生字典,学号为1~20,分数为50~100随机
d = {'student%d'% i: randint(50,100) for i in range(1,21)}
print(d)

#过滤出分数为90的学生字典
#第一种方法
d1 = {k:v for k,v in d.items() if v >= 90}
print(d1)

#第二种方法
d2 = dict(filter(lambda item:item[1] >= 90, d.items()))
print(d2)

1.3.如何在集合中根据条件筛选数据

# 1.3.如何在集合中根据条件筛选数据

from random import randint

s = {randint(0,20) for _ in range(20)}
print(s)

#筛选出能被3整除的数
s1 = {x for x in s if x % 3 == 0}
print(s1)

1.4.如何为元祖中的每个元素命名,提高程序可读性

如下元祖,通过函数判断年龄和性别,但是这样代码可读性很差,别人并不知道student[1],student[2]代表什么意思。如何解决呢

def func(student):
    if student[1] < 18 :
        pass

    if student[2] == 'male':
        pass

student = ('derek',22,'male','111@qq.com')

func(student)

方案一:定义枚举类型

#1.4..如何为元祖中的每个元素命名,提高程序可读性

def func(student):
    if student[1] < 18 :
        pass

    if student[2] == 'male':
        pass

s1 = ('derek',22,'male','111@qq.com')

#第一种:使用枚举
from enum import IntEnum

class StudentEnum(IntEnum):
    NAME = 0
    AGE = 1
    SEX = 2
    EMAIL = 3

print(s1[StudentEnum.NAME])
print(s1[StudentEnum.AGE])

方案二:使用标准库中collections.namedtuple替代内置tuple

#1.4..如何为元祖中的每个元素命名,提高程序可读性

def func(student):
    if student[1] < 18 :
        pass

    if student[2] == 'male':
        pass

s1 = ('derek',22,'male','111@qq.com')

#第一种:使用枚举
from enum import IntEnum

class StudentEnum(IntEnum):
    NAME = 0
    AGE = 1
    SEX = 2
    EMAIL = 3

print(s1[StudentEnum.NAME])
print(s1[StudentEnum.AGE])

#第二种:使用标准库中collections.namedtuple替代内置tuple
from collections import namedtuple

Student = namedtuple('student',['name','age','sex','email'])
s2 = Student('derek',22,'male','222@qq.com')
print(s2[0])               #derek
# 可以通过s2.name获取姓名
print(s2.name)             #derek


来源:https://www.cnblogs.com/derek1184405959/archive/2019/08/14/11349234.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

提取码: 
下载次数:0    下载所需积分:5 吾①币
下载权限: 注册会员  以上或 VIP会员   [购买VIP]   [充值铜板]  [免费赚铜板]


路过

雷人

握手

鲜花

鸡蛋
郑重提示

本站现该为邀请码注册下载,20元一个永久免费下载(除年费会员、永久会员专享和棋牌源码)源码资源

20元永久免费下载!

邀请一个会员注册即可领取10元

如有疑问可直接联系本站管理员:28840654

我知道了

平台简介

51源码论坛是国内新兴著名的商业网站源码资源站,收罗各类精品源码、完全整站源码、整站数据、免费源码、APP原生源码、E4A源码、dz模版、网站源码、dz插件、织梦模版、92Game等精品资源,提供各类网站;APP;软件安装教程,让小白变大神!另外提供链接交换、资源网站卖家中介、交换等等服务,致力为中国中小站长建站添动力!

QQ|Archiver|手机版|小黑屋|51源码网_我要源码 ( 皖ICP备17028231号-3 ) 知道创宇云安全

返回顶部