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

1.5.如何根据字典中值的大小,对字典中的项进行排序

第一种方法:列表解析

# 1.5.如何根据字典中值的大小,对字典中的项进行排序

from random import randint

d = {k: randint(60, 100) for k in 'abcdefg'}

print(d)

#第一种方法:使用列表解析或者zip()函数,把字典的keys和values反转过来

list1 = [(v,k) for k,v in d.items()]

#或者使用zip()函数

# list2 = list(zip(d.values(),d.keys()))

print(list1)

list1 = sorted(list1,reverse=True)

print(list1)

第二种使用sorted

# 1.5.如何根据字典中值的大小,对字典中的项进行排序

from random import randint

d = {k: randint(60, 100) for k in 'abcdefg'}

print(d)

#第一种方法:使用列表解析或者zip()函数,把字典的keys和values反转过来

list1 = [(v,k) for k,v in d.items()]

#或者使用zip()函数

# list2 = list(zip(d.values(),d.keys()))

list1 = sorted(list1,reverse=True)

#第二种方法:使用sorted排序

p = sorted(d.items(),key=lambda item:item[1],reverse=True)

print(p)     #[('a', 97), ('b', 93), ('d', 93), ('e', 92), ('f', 76), ('c', 66), ('g', 61)]

#对分数添加一个排名

d = {k:(i,v) for i, (k,v) in enumerate(p,1)}

print(d)    #{'g': (1, 97), 'd': (2, 92), 'f': (3, 91), 'c': (4, 79), 'a': (5, 78), 'e': (6, 67), 'b': (7, 64)}

1.6.如何统计序列中元素的频度

# 1.6如何统计序列中元素的频度

from random import randint

from collections import Counter

data = [randint(1,5) for _ in range(1,20)]

print(data)   #[5, 2, 1, 2, 5, 3, 1, 1, 1, 4, 2, 5, 3, 2, 3, 5, 1, 2, 5]

#计算频度最高的是三个数

c = Counter(data)

print(c.most_common(3))    #[(1, 5), (3, 4), (2, 4)]

1.7.如何快速找到多个字典中的公共键

# 1.7.如何快速找到多个字典中的公共键

from random import randint,sample

from functools import reduce

d1 = {k:randint(1,4) for k in sample('abcdefgh',randint(3,6))}

d2 = {k:randint(1,4) for k in sample('abcdefgh',randint(3,6))}

d3 = {k:randint(1,4) for k in sample('abcdefgh',randint(3,6))}

#1.使用字典的keys()方法,得到一个字典keys的集合

#2.使用map函数,得到每个字典keys的集合

#3.使用reduce,取所有字典keys集合的交集

dl = [d1,d2,d3]

#找到三个字典中相同的keys

result = reduce(lambda a,b: a & b, map(dict.keys, dl))

print(result)

1.8.如何让字典保持有序

# 1.8.如何让字典保持有序

from collections import OrderedDict

from itertools import islice

d = OrderedDict()

d['e'] = 5

d['d'] = 4

d['c'] = 3

d['b'] = 2

d['a'] = 1

print(d)    #OrderedDict([('e', 5), ('d', 4), ('c', 3), ('b', 2), ('a', 1)])

#OrderedDict字典,在迭代操作时,它会保持元素被插入时的顺序

def query_by_order(d, a, b =None):

if b is None:

b = a + 1

return list(islice(d,a,b))

#第五个key

res1 = query_by_order(d,4)

print(res1)     #['a']

#第二个和第三个key

res2 = query_by_order(d,1,3)

print(res2)     #['d', 'c']

1.9.如何实现用户的历史记录功能

使用容量为n的队列存储历史记录

  • 使用deque双端循环队列存储历史记录(deque是保存到内存中,下次启动历史记录会消失)
  • 如果想保存到硬盘中,使用pickle模块,以便下次启动使用

# 1.9如何实现用户的历史记录功能

from random import randint

from collections import deque

import pickle

def guess(n, k):

if n == k:

print('猜对了,这个数字是%d' % k)

return True

if n < k:

print('猜大了,比%d小' % k)

elif n > k:

print('猜小了,比%d大' % k)

return False

def main():

n = randint(1, 100)

i = 1

hq = deque([], 5)

while True:

line = input('[%d]请输入一个数字:' % i)

if line.isdigit():

k = int(line)

hq.append(k)

i += 1

if guess(n, k):

break

elif line == 'quit':

break

elif line == 'history':

print(hq)

if __name__ == '__main__':

main()

#结果

[1]请输入一个数字:1

猜小了,比1大

[2]请输入一个数字:2

猜小了,比2大

[3]请输入一个数字:3

猜小了,比3大

[4]请输入一个数字:history

deque([1, 2, 3], maxlen=5)

[4]请输入一个数字:

Python3实用编程技巧进阶 ☝☝☝的更多相关文章

  1. Python3实用编程技巧进阶✍✍✍

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  2. Python3实用编程技巧进阶

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

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

    1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等于零的数据 #第一种方法,不推荐 res1 ...

  4. 7.python3实用编程技巧进阶(二)

    2.1.如何拆分含有多种分隔符的字符串 #2.1.如何拆分含有多种分隔符的字符串 s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz' #第一种方法 def my__ ...

  5. 8.python3实用编程技巧进阶(三)

    3.1.如何实现可迭代对象和迭代器对象 #3.1 如何实现可迭代对象和迭代器对象 import requests from collections.abc import Iterable,Iterat ...

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

    4.1.如何读写csv数据 爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup book ...

  7. 10.python3实用编程技巧进阶(五)

    5.1.如何派生内置不可变类型并修其改实例化行为 修改实例化行为 # 5.1.如何派生内置不可变类型并修其改实例化行为 #继承内置tuple, 并实现__new__,在其中修改实例化行为 class ...

  8. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  9. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

随机推荐

  1. 新书推荐《再也不踩坑的Kubernetes实战指南》

      <再也不踩坑的Kubernetes实战指南>终于出版啦.目前可以在京东.天猫购买,京东自营和当当网预计一个星期左右上架. 本书贴合生产环境经验,解决在初次使用或者是构建集群中的痛点,帮 ...

  2. Spring MVC+ajax进行信息验证

    本文是一个ajax结合Spring MVC使用的入门,首先我们来了解一下什么是Ajax AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX 最大的优点是在不重新加载整个页面的情况下,可 ...

  3. java读取Excel —— XSSFWorkbook 找不到该类

  4. [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher 题解报告

    来刷kuangbin字符串了,字符串处理在ACM中是很重要的,一般比赛都会都1——2道有关字符串处理的题目,而且不会很难的那种,大多数时候都是用到一些KMP的性质或者找规律. 点击标题可跳转至VJ比赛 ...

  5. 公众号第三方授权 以及微信H5支付(前端)

    由于公司业务需要,想用户通过我们公众号平台支付的金额直接进去用户自己的账户,所以涉及到公众号第三方授权: 由于涉及第三方,故需要在微信开放平台创建第三方平台: 创建第三方平台:(申请页面链接:http ...

  6. toString(),String.valueOf,(String)在处理空对象时的区别

    public static void main(String[] args) { Map<String,Object> map = new HashMap<>(); map.p ...

  7. Linux初识之VMWare14中配置Centos7桥接网络环境

    1.查看当前初始环境如下:

  8. 利用ShowDoc自动生成api接口文档

    最近在做新项目,感觉写完一个接口 还要去再写一遍api文档 挺浪费时间的,所以借用ShowDoc的api开放功能 自动生成api文档. 首先 去 https://www.showdoc.cc/ 注册一 ...

  9. 【linux】【gitlab】gitlab安装、备份、恢复、升级、内存消耗问题

    前言 GitLab:GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务.功能:Gitlab 是一个提供代码托管.提交审核和问题跟踪的代码管理平 ...

  10. el-table合并行并自定义某一列或几列

    在el-table的官方组件中并没有看到具体的合并行或者列及自定义表格内容,于是就自己写了一个效果如下所示. 这种对左侧内容要求比较高,要求行合并,并要自定义一些内容.下面说一下具体方法及代码写法. ...