Python 刷 Leetcode 总结(持续更新)

l.reverse() vs. reversed(l)

  • l.reverse() 方法对列表原地进行翻转,无返回值;reversed(l) 返回一个 iterator 迭代器,可以用 list(reversed(l)) 把它转化成列表。
  • reverse() 只能针对列表;而 reversed() 可以翻转譬如 list, tuple, string 等可迭代对象。
l = [1,2,3]
l.reverse()
---
iter_ = reversed(l)
next(iter_)

注意:调用迭代器的 next 方法会减少该迭代器内的元素,永久丢失这部分信息。如下面的例子

l = [1,2,3]
iter_ = reversed(l)
next(iter_)
list(iter_)
>>> [2,1]

l.sort() vs. sorted(l)

  • l.sort() 不返回值,直接原地对 l 进行排序,在原列表上修改;sorted(l) 返回一个新的排序后的列表。
  • sort() 函数只能针对列表排序;sorted() 函数还可以对任何可迭代对象进行排序,譬如 set, dict, tuple, string…

另外,sorted(iterable, key, reverse=False) 使用更为灵活,可以指定根据何种键进行排序,并选择升序或降序。

下面是两种常见的用法:

  1. 计算排序后的下标列表
idx_sorted = sorted(range(len(l)), key=lambda k: l[k])
  1. 根据字典的 value 排序
sorted(dic, key=dic.get)

sorted(dic, key=lambda k: dic[k])

以上两种写法是等价的,第二种描述的就是 dic.get 方法

还可以指定 reverse 参数,改变大小排列顺序。默认按照升序排列;如果 reverse=True,则按照降序排列

注意❗:排序中不会发生隐式类型转换sorted([2, "1"]) 会报错,无法比较 int 和 str 类型。


字符串:不可变对象

Python 中的字符串是不可变对象,不能在原地修改。在 Leetcode 上一些关于字符串的题解沿用 C++ 的思路,对字符串进行原地修改,对于 Python 来说是没有意义,甚至错误的。

注:C++ 中的 std:string 是可变对象;Java, Python 中的字符串均是不可变对象。

列表切片注意事项

我们知道,列表切片的步长为正数时,第一个数代表起始位置;第二个数代表结束位置;第三个数代表步长。

但当列表切片的步长为负数时,第一个数代表的是结束的位置(默认是列表末尾),第二个数代表的才是起始位置(默认是列表开头)

在这里插入图片描述
可参考:Python 列表与数组的切片对比


变量的访问权限

对于全局可变对象(list, dictionary, set 等),在函数内部可以访问并修改。
而全局不可变对象(int, float, bool, string, tuple),在函数内部不能直接访问,需要加关键词 global

例子:不可访问 int 类型

加关键词 global后,可以访问并修改:
在这里插入图片描述

可以直接访问并修改 set 类型的数据:
在这里插入图片描述


nonlocal 关键字

nonlocal 用于函数嵌套中的内层函数,用于访问、修改外层函数的不可变对象。(可变对象可以直接访问)

这个关键字在写回溯算法时经常用到

在这里插入图片描述

UnboundLocalError: local variable ‘count’ referenced before assignment

nonlocal 声明,该 int 类型的变量在外层函数内被定义了:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种流行的高级编程语言,因其简洁易读的语法和广泛的应用领域而受到开发者喜爱。LeetCode 是一个在线编程平台,专门用于算法和技术面试的准备,提供了大量的编程题目,包括数据结构、算法、系统设计等,常用于提升程序员的编程能力和解决实际问题的能力。 在 Python LeetCode 题目通常涉及以下步骤: 1. **注册账户**:首先在 LeetCode 官网 (https://leetcode.com/) 注册一个账号,这样你可以跟踪你的进度和提交的代码。 2. **选择语言**:登录后,在个人主页设置中选择 Python 作为主要编程语言。 3. **学习和理解题目**:阅读题目描述,确保你理解问题的要求和预期输出。题目通常附有输入示例和预期输出,可以帮助你初始化思考。 4. **编写代码**:使用 Python 编写解决方案,LeetCode 提供了一个在线编辑器,支持实时预览和运行结果。 5. **测试和调试**:使用给出的测试用例来测试你的代码,确保它能够正确地处理各种边界条件和特殊情况。 6. **提交答案**:当代码完成后,点击 "Submit" 提交你的解法。LeetCode 会自动运行所有测试用例并显示结果。 7. **学习他人的代码**:如果遇到困难,可以查看社区中的其他优秀解法,学习他人的思路和技术。 8. **反复练习**:题不是一次性的事情,通过反复练习和优化,逐渐提高解题速度和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值