专栏首页有趣的django6.python3实用编程技巧进阶(一)

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 9.python异常处理

    常见异常 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x FileNotFoundError ...

    zhang_derek
  • 11.python线程

    基本概念 1.进程 定义:  进程就是一个程序在一个数据集上的一次动态执行过程。 组成:  进程一般由程序、数据集、进程控制块三部分组成。 程序:  我...

    zhang_derek
  • 7.python常用模块

    time模块 常用表示时间方式: 时间戳,格式化的时间字符串,元组(struct_time) UTC(Coordinated Universal Time,世界...

    zhang_derek
  • python3 (import stri

    string模块中定义了一些常用的属性(包含所有数字,字母,可打印的所有ascii码等)

    py3study
  • Java中的静态绑定与动态绑定的区别,讲明白了

    在静态绑定中,绑定可以在运行时或编译时解析。所有static,final和private方法的绑定过程都在编译时完成。

    用户1289394
  • IOS移动开发从入门到精通 swift进阶

    func 1 func sayHelloSwift() 2 { 3 print(“Hello, Swift!”) 4 }

    用户5760343
  • 全球首个运筹优化挑战赛冠军产生 京东献出顶级挑战引发供应链创新突破

    历时四个月,由京东主办的全球首个聚焦于智能物流、智能供应链两大无界零售基础设施的顶级运筹优化赛事圆满落幕。顶级的挑战吸引了顶级的人才,最终在「城市物流运输车智能...

    京东技术
  • 初遇python甚是喜爱之Integer整型与Float浮点型操作

    各位观众老爷们大家好,今天学习python的Integer整型与Float浮点型操作,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • TypeScript的类型断言,有点像ABAP的强制类型转换

    通过类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”。 类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只...

    Jerry Wang
  • akka-typed(6) - cluster:group router, cluster-load-balancing

    先谈谈akka-typed的router actor。route 分pool router, group router两类。我们先看看pool-router的使...

    用户1150956

扫码关注云+社区

领取腾讯云代金券