大家好,这里是为代码封神的封神榜(有点吹牛皮了,哈哈)。还是新人初来乍到,希望大家多多指教。
今天我为初学者整理了 11 个编程小技巧,使用起来非常省心,相信你看完定会有所收获。
有两个字典,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]:
有两个字典,dict1、dict2,现在要把 dict1、dict2 的内容合并(Merge)到 dict3 中,有两种方法:
方法一
dict3 = {} dict3.update(dict1) dict3.update(dict2)
方法二
dict3 = {**dict1, **dict2}
方法二使用了 ** 来解包字典,非常简洁和优雅,推荐使用。
假如有这样的列表:
[{“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}]
方法一,使用 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 了。
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)
将以下内容保存为 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
list1 = ['a', 'b', 'c'] list2 = [1, 2, 3] dictionary = dict(zip(list1, list2)) print(dictionary) # {'a': 1, 'b': 2, 'c': 3}
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 >>>
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))
简单来说,就是借助于字典,把策略写在字典里面,比如设计一个函数,计算两个数的加、减、乘、除、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)
这也是设计模式中的策略模式的最小示例。
import random MyList = [1, 2, 3, 4] random.shuffle(MyList) print(MyList) # [3, 4, 2, 1]
11个适合小白入手的项目,整理不易,喜欢的别忘记点个赞在划走。