首页 > 编程语言 >大道至简:Python奇技淫巧记录 | 语法糖分析

大道至简:Python奇技淫巧记录 | 语法糖分析

时间:2023-04-14 15:57:15浏览次数:52  
标签:pre arr 大道至简 Python cnt now find 奇技淫巧

目录

0. 内置函数 enumerate

偶然看到别人题解中 for i, item in enumerate(arr)的写法,非常方便。
在需要获取元素index而又不关心数组长度情况下,推荐这种写法,节省了两行代码!
否则:

n = len(arr)
for i in range(n):
   item = arr[i]
   pass

# 或者
i = 0
for item in arr:
   pass
   i += 1

参考Python enumerate() 函数 | 菜鸟教程 (runoob.com),该函数输入为可迭代对象,可选第二个参数为开始下标位置,默认为0。

1. zip妙用

类似于map函数,内置函数zip将一组可迭代对象按每个元素顺序打包,返回元组的可迭代类型/列表。
一般配合符号 * 使用,将列表解压,可以理解为去掉了外层括号,将多个元素作为不定长参数。
二维矩阵转置:

a = [[1,2,3],[4,5,6]]
a_T = list(zip(*a)) # [(1, 4), (2, 5), (3, 6)]

2. Python传参

写这道题1268. 搜索推荐系统碰到一个问题,需要部分搜索,返回前缀相同的字典序最小的三个字符串。

要求字典序最小,构建了字典树后,使用DFS即可。因为只要最多3个,常规做法就是维护全局变量,记录已经找到的答案。

查看原始DFS写法

   # 全局变量
   cnt = 3  # 还需要找的数量
   now = [] # 已找到的字符串
   def find(p, pre=''):
       # 从p位置开始找3个
       nonlocal now, cnt
       if 'isEnd' in p:
           now.append(pre)
           cnt -= 1
       for x in sorted(p.keys()):
           if cnt==0:
               break
           if x!='isEnd':
               find(p[x], pre+x)
   
   

研究发现,Python传递的可变参数,如list,dict类型其实都是引用,因此可以将全局变量传参进去,这样会使代码更加简洁。

def change(arr, i=1):
   	arr.append(i)
   	if len(arr)<10:
   		change(arr, i+1)
   
arr = []
change(arr)
print(arr) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
查看修改后DFS写法

   def find(p, pre, now):
       # 从p位置开始找3个
       if 'isEnd' in p:
           now.append(pre)
       if len(now)==3:
           return
       for x in sorted(p.keys()):
        if len(now)==3:
               break
           find(p[x], pre+x, now)
   
   

标签:pre,arr,大道至简,Python,cnt,now,find,奇技淫巧
From: https://www.cnblogs.com/izcat/p/17318555.html

相关文章

  • DolphinDB +Python Airflow 高效实现数据清洗
    DolphinDB作为一款高性能时序数据库,其在实际生产环境中常有数据的清洗、装换以及加载等需求,而对于该如何结构化管理好ETL作业,Airflow提供了一种很好的思路。本篇教程为生产环境中ETL实践需求提供了一个解决方案,将PythonAirflow引入到DolphinDB的高可用集群中,通过使用A......
  • 功能不够用?使用C++编写通达信插件及接入Python(一)
    第一次尝试,参照:http://www.xiaoyunyun.net/index.php/archives/53.html 和 https://blog.csdn.net/wiowei/article/details/121466094在绑定DLL环节失败了第二次尝试:参照:https://zhuanlan.zhihu.com/p/5698198681.修改VS2019,勾选 windows10SDK2.用Visualstudio打开......
  • python3控制结构
    1、介绍控制结构一般为:顺序结构,默认的从前到后执行顺序执行即是条件结构,if结构,python没有switch结构循环结构,while和for结构,以及迭代器,python不存在dowhile结构2、if结构if条件判断:passelif条件判断:passelse:pass3、while结构i=3whilei>0:......
  • ubuntu安装python开发环境
    一般ubuntu是自带python的,不需要安装。这里主要讲,更新pip,设置镜像源,配置虚拟环境,为后续开发做准备。一、更新pippip3configlist如果报没有config命令,说明pip版本不够高。aptinstallpython3-pip这里可以重新安装pip,一般不需要。pip3install-Up......
  • python 正则处理字符串,使用函数
    """在正则截取的字符子串基础上,处理字符串Python的re模块提供了re.sub用于替换字符串中的匹配项。语法:re.sub(pattern,repl,string,count=0,flags=0)参数:pattern:正则中的模式字符串。repl:替换的字符串,也可为一个函数。string:要被查找替换的原始字符串。cou......
  • python3 静态方法,类方法和普通方法
    classMyClass:@staticmethoddefstatic_method():print('静态方法')@classmethoddefclass_method(cls):print('类方法')#普通方法defnormal_method(self):print('普通方法')MyClass.stati......
  • python3 多继承时,父类有相同一个函数的选择
    classPeople:name=''age=0__weight=0def__init__(self,name,age,weight):print("People初始化")self.age=ageself.name=nameself.__weight=weightprint("People......
  • python3 各种方式连接mysql数据库
    print("python连接mysql数据库")#importmysql.connector"""#1使用mysql-connector连接mysqlimportmysql.connectormydb=mysql.connector.connect(host="localhost",user="clever",passwd="1881301"......
  • 列举说明Python同Java及C++的不同之处
    首先是C++C++是在C语言的基础上发展起来的,他包含了C语言的所有内容。同时,也引入了面向对象的概念。优点:1、他包含了C语言的内容,包括指针,使得C++在执行效率上特别的高效。2、引入面向对象的概念,使得开发效率提高。3、提供了很多的库,具有较好的封装性和移植性(代码)。缺点:1、C++比较难......
  • 对比Python中的列表、元组、字典、集合、字符串等之间异同
    1.数据类型列表、元组、字典、集合、字符串均属于python3的标准数据类型。字符串和元组属于不可变数据,即创建后不可修改。列表、字典、集合属于可变数据,即创建后可以修改元素。2.创建有元素的对象3.创建没有元素的对象列表使用eval()或list()或中括号[]进行创建,元素之间使用逗号分......