注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
我前几个月开始使用python来刷题, 然后收集了一些比较有用的tricks. 这篇文章主要是谈论range的用法。
会谈到的点:
1. Intro: 大概介绍range
2. Tips: range可以用于执行n次的东西
3. Tips: range可以搭配zip一起用, 可以用到index
4. Tips: 两种方式可以用range来从后面开始iterate list
1. Intro:
range(
start_index, # inclusive, 这个会被包括在range里面
end_index, # exclusive, 这个不会被包括在range里面
stepsize, # 每次increment/decrement的量
)
example:
range(5) 是等于 [0, 1, 2, 3, 4]
range(1, 5) 是等于 [1, 2, 3, 4]
range(1, 10,2) 是等于 [1, 3, 5, 7, 9]
2. range可以用于需要执行n次的东西
用法:
range这个用法只会被执行n次, 可以在一些场合里面很有作用, 比如说BFS
for _ in range(n):
## …
example:
BFS example:
这个是 Binary Tree Level Traversal 的答案
def levelOrder(self, root):
res = []
queue = []
queue.append(root)
while len(queue):
cur_len = len(queue)
cur_level = []
# 这里使用range 可以确保我们当前只在往cur_level加入现在这一层的node
for _ in range(cur_len):
cur_node = queue.pop(0)
cur_level.append(cur_node.val)
if cur_node.left:
queue.append(cur_node.left)
if cur_node.right:
queue.append(cur_node.right)
res.append(cur_level)
return res
3. 巧用zip让我们可以同时拿到index和value, 在有些问题里面会很便利
用法:
for index, num in zip(range(len(nums)), nums):
## …
example:
Two sum example:
- def twoSum(self, nums, target):
- hashtable = {}
- # 这里使用zip, 我们可以省略 num = nums[i] 那一步
- # 这样可以让code看起来更干净一些
- for i, num in zip(range(len(nums)), nums):
- new_t = target - num
- if new_t in hashtable:
- return [hashtable[new_t], i]
- else:
- hashtable[num] = i
复制代码
4. 如何reverse iteration
用法:
这个适用于需要从list后面开始iterate的题目
for i in range(n)[::-1]:
## …
for i in range(n-1, -1, -1):
## …
最后 求一下大米 🙏。 没有大米的我 很多东西都看不到。 希望大家好好支持啦, 如果有需要 我会继续发类似的帖子
补充内容 (2019-8-12 17:43):
补充一下, 感谢@b00901192 的建议, 我们也可以用for i, num in enumerate(nums), 这样比用zip更干净一些[/i] |