专栏首页Python七号11 个编程小技巧,使用起来更省心

11 个编程小技巧,使用起来更省心

正在学 Python 的你并不孤单,有我在这里陪着你每天学习一个 Python 小技术,你可以加我微信「somenzz」相互交流。今天我为初学者整理了 11 个编程小技巧,使用起来非常省心,相信你看完定会有所收获。

1、合并(Merge)两个字典

有两个字典,dict1、dict2,想把 dict2 的内容合并(Merge)到 dict1 中,可以使用 dict1.update(dict2)

In [1]: dict1 = { 'a': 1, 'b': 2}

In [2]: dict2 = { 'b': 3, 'd': 4}

In [3]: dict1.update(dict2)

In [4]: dict1
Out[4]: {'a': 1, 'b': 3, 'd': 4}

In [5]: 

2、合并(Merge)两个字典,但不能改变原始字典

有两个字典,dict1、dict2,现在要把 dict1、dict2 的内容合并(Merge)到 dict3 中,有两种方法:

方法一

dict3 = {}
dict3.update(dict1)
dict3.update(dict2)

方法二

dict3 = {**dict1, **dict2}

方法二使用了 ** 来解包字典,非常简洁和优雅,推荐使用。

3、对包含字典的列表进行排序

假如有这样的列表:

[{"name": "张三", "age": 30 },{"name": "李四", "age": 10 },{"name": "王武", "age": 15 }]

其内部元素是一个字典,如何进行自定义排序呢?比如按照 age 进行排序:

list1 = [{"name": "张三", "age": 30 },{"name": "李四", "age": 10 },{"name": "王武", "age": 15 }]
list1.sort(key = lambda x: x["age"])
print(list1)

[{'name': '李四', 'age': 10},
 {'name': '王武', 'age': 15},
 {'name': '张三', 'age': 30}]

如果不能改变 list1 原有的次序,可以使用内建函数 sorted,sorted 返回排序后的结果,并不改变原始顺序:

list1 = [{"name": "张三", "age": 30 },{"name": "李四", "age": 10 },{"name": "王武", "age": 15 }]
sorted_list = sorted(list1, key = lambda x: x["age"])
print(sorted_list)

[{'name': '李四', 'age': 10},
 {'name': '王武', 'age': 15},
 {'name': '张三', 'age': 30}]

4、检查文件是否存在

方法一,使用 os.path 模块

In [2]: import os

In [3]: if os.path.exists("/usr/bin/passwd"):
   ...:     print("存在")
   ...:
存在

方法二、使用 pathlib(推荐使用)

In [4]: from pathlib import Path

In [5]: if Path("/usr/bin/passwd").exists():
   ...:     print("存在")
   ...:
存在

关于 pathlib 为什么比 os.path 好用,可以阅读求求你,别用 os.path 了

5、获取某个目录最新的文件或目录

In [7]: import glob
   ...: import os
   ...:
   ...: list_of_files = glob.glob('/Users/aaron/*') # * means all if need specific format
   ...:  then *.csv
   ...: latest_file = max(list_of_files, key=os.path.getctime)
   ...: print(latest_file)
   ...:
/Users/aaron/web-service-gin

更推荐你使用 pathlib

from pathlib import Path
folder_path = Path('/Users/aaron')
list_of_paths = folder_path.glob('*')
latest_path = max(list_of_paths, key = lambda p: p.stat().st_ctime)

6、随机密码生成器

将以下内容保存为 generate_random_password.py:

import string
import random

def generate_random_password():
    ## 输入密码长度
    length = int(input("请输入密码长度:"))
    
    ## 密码字符范围
    characters = list(string.ascii_letters + string.digits + "!@#$%^&*()")
    random.shuffle(characters)
    
    ## 随机选择字符
    password = []
    for i in range(length):
        password.append(random.choice(characters))

    random.shuffle(password)

    ## 现实生成的密码
    print("".join(password))

if __name__ == "__main__":

    generate_random_password()

执行结果

❯ python generate_random_password.py
请输入密码长度:6
i3o!(o

7、将两个列表转换为一个字典

list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
dictionary = dict(zip(list1, list2))
print(dictionary) # {'a': 1, 'b': 2, 'c': 3}

8、测量小代码片段的执行时间

import timeit
start = timeit.default_timer()
[i for i in range(100000)]
stop = timeit.default_timer()
print(stop - start)

timeit 是标准库提供的计时工具,还可以在命令行这样使用:

示例 1:命令行界面来比较三个不同的表达式。

$ python3 -m timeit '"-".join(str(n) for n in range(100))'
10000 loops, best of 5: 30.2 usec per loop
$ python3 -m timeit '"-".join([str(n) for n in range(100)])'
10000 loops, best of 5: 27.5 usec per loop
$ python3 -m timeit '"-".join(map(str, range(100)))'
10000 loops, best of 5: 23.2 usec per loop

示例 2:通过代码中比较三个不同的表达式。

>>>
>>> import timeit
>>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
0.3018611848820001
>>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000)
0.2727368790656328
>>> timeit.timeit('"-".join(map(str, range(100)))', number=10000)
0.23702679807320237

timeit 内部还可以传入一个可调用对象:

>>> def fun():
...     return "-".join(map(str, range(100)))
... 
>>> import timeit
>>> timeit.timeit(fun, number=10000)
0.16171755199999893
>>> 

9、统计列表中频率最高的元素

def most_frequent(list):
  return max(set(list), key=list.count)

mylist = [1,1,2,3,4,5,5,1,2,1,]
print("频率最高的元素: ", most_frequent(mylist))

10、如何避免冗长的 if else 分支

简单来说,就是借助于字典,把策略写在字典里面,比如设计一个函数,计算两个数的加、减、乘、除、n 次方

def calculate(action_des: str, a:int,b:int) -> int:
 if action_des == '+':
  return a+b
 elif action_dex == '-':
  return a-b
 elif action_dex == '*':
  return a*b
 elif action_dex == '/':
  return a/b
 elif action_dex == '**':
  return a**b

借助于字典,可以不需要使用 if else:

import operator

def calculate(action_des: str, a:int,b:int) -> int:
 action = {
  "+": operator.add,
  "-": operator.sub,
  "/": operator.truediv,
  "*": operator.mul,
  "**": pow
    }
 return action[action_des](a, b)

这也是设计模式中的策略模式的最小示例。

11、让列表内的元素随机排列一下

import random

MyList = [1, 2, 3, 4]
random.shuffle(MyList)
print(MyList) # [3, 4, 2, 1]

最后

以上 11 个编程小技巧,如果有帮助,点个赞再滑走吧。

本文分享自微信公众号 - Python七号(PythonSeven),作者:somenzz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-29

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 全栈工程师15年经验分享:40个改变编程技能的小技巧

    最近,这样一份「心得」火了。这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文——「40 Tips that will change you...

    量子位
  • 3 个 Python 编程小技巧

    我们知道,字典的本质是哈希表,本身是无法排序的,但 Python 3.6 之后,字典是可以按照插入的顺序进行遍历的,这就是有序字典,其中的原理,可以阅读为什么 ...

    somenzz
  • 15 年编程经验,总结出了 40 个改变编程的小技巧!

    最近,这样一份「心得」火了。这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文——「40 Tips that will change you...

    用户8983410
  • 微信热传的 100+ 经典技术文章

    阿炬
  • 简单的Excel VBA编程问题解答——完美Excel第183周小结

    下面是2020年11月12日发布的一些简单的ExcelVBA问题的答案,是不是和你想的一样。

    fanjy
  • 可以免费自学编程的12个网站

    时见疏星
  • 可以免费自学编程的12个网站

    很多人包括一些企业家,和市场营销人员都认为学习编程对一个人走向成功十分有帮助。在过去的一年里,我一直在学习编程。它有助我成为一个更好的创业者,我甚至可以提供一些...

    BestSDK
  • Kubernetes上对应用程序进行故障排除的技巧

    从 Docker 迁移到 Docker Swarm,再到 Kubernetes,然后处理了多年来的所有各种 API 更改之后,我非常乐意发现部署中出现的问题和把...

    肉眼品世界
  • 【CSS】947- 十几个 CSS 高级技巧汇总

    pingan8787
  • 10 个提升效率的Linux小技巧

    您是否曾经惊讶于看到某人在 UNIX 中非常快速地工作,触发命令并快速地执行操作?是的,我碰到过几次,并且我一直都在向那些超级巨星开发者学习。在本文中,我想分享...

    淡定的蜗牛
  • 提高程序可读性

    在编程过程中注意提高程序的可读性是良好的编程习惯,这使程序更易于理解,也更容易在以后进行修改和更正。同时也有助于我们理清自己的编程思路。

    From Zero
  • Python 随机生成测试数据的模块:faker基本使用方法详解

    本文实例讲述了Python 随机生成测试数据的模块:faker基本使用方法。分享给大家供大家参考,具体如下:

    砸漏
  • 10分钟教你用python 30行代码搞定简单手写识别!

    毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍,这不刚开了个头就遇上了个难题——做笔记到...

    短短的路走走停停
  • 从入门到进阶,这份完整的Python学习

    教育部考试中心近日发布了“关于全国计算机等级(NCRE)体系调整”的通知,决定自2018年3月起,在全国计算机二级考试中加入了“Python语言程序设计”科目...

    py3study
  • 听说你在等我的ARTS

    掐指一算,这应该是祖国妈妈生日之前最后一篇关于ARTS的打卡系列。每次周四,都感觉自己压力好大,准备资料、写算法肯定都得提前做,不然周四当天,我肯定没法完成。

    程序员小跃
  • 30行代码搞定简单手写识别!

    毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍,这不刚开了个头就遇上了个难题——做笔记到...

    用户1621951
  • Python 工匠:使用数字与字符串的技巧

    数字是几乎所有编程语言里最基本的数据类型,它是我们通过代码连接现实世界的基础。在 Python 里有三种数值类型:整型(int)、浮点型(float)和复数(c...

    用户2196567
  • 20 个提高生产力的 Linux 命令与技巧!

    简介:这里有一些很有用的 Linux 命令,终端技巧和快捷方式,可以在使用Linux命令行时节省大量时间。

    杰哥的IT之旅
  • 如何高效利用 Grafana 监控分析 TiDB 指标

    使用 TiDB Ansible 部署 TiDB 集群,会同时部署一套 Grafana + Prometheus 的监控平台,这套监控用来收集和展示 TiDB 集...

    PingCAP

扫码关注云+社区

领取腾讯云代金券