1706. 球会落何处 for else语法

简介: 1706. 球会落何处 for else语法

题:从格子顶部n列放球,返回球的落点。如果停在中间,在为-1。

解:模拟(见官方题解)

如果下落的下一步掉到边缘(<0 or >=n),或下一个挡板方向(row[col] != dir))则听在中间。

class Solution:
    def findBall(self, grid: List[List[int]]) -> List[int]:
        #grid[i][j] = 1:右 ; =-1 :左
        m,n = len(grid),len(grid[0])
        res = [-1]*n
        for ball in range(n):
            col = ball
            for row in grid:
                dir = row[col]
                col += dir
                if col < 0 or col ==n or row[col] != dir:
                    break
            else:
                res[ball] = col
        return res

for~else语法:4. 其他流程控制工具 — Python 3.10.2 文档


else可以和for或while循环搭配。for 循环中,可迭代对象中的元素全部循环完毕,或 while 循环的条件为假时,执行该子句;break 语句终止循环时,不执行该子句。


>>> for n in range(2, 10):

...     for x in range(2, n):

...         if n % x == 0:

...             print(n, 'equals', x, '*', n//x)

...             break

...     else:

...         # loop fell through without finding a factor

...         print(n, 'is a prime number')

...

输出:

2 is a prime number

3 is a prime number

4 equals 2 * 2

5 is a prime number

6 equals 2 * 3

7 is a prime number

8 equals 2 * 4

9 equals 3 * 3

个人理解:

else和循环搭配可以认为循环正常结束没被打断(break)则做else。我们可以利用这个特点替代if 循环结束

if 循环结束:
    do()

else:
    do()
    arr = [1, 2, 3, 4, 5]
    n = len(arr)
    i = 0
    while i < n:
        if arr[i] > 7:
            print('find x>7,x=', arr[i])
            break
        i += 1
####if 循环结束:
    if i == n:
        print("can't find x>7")
    arr = [1, 2, 3, 4, 5]
    n = len(arr)
    i = 0
    while i < n:
        if arr[i] > 7:
            print('find x>7,x=', arr[i])
            break
        i += 1
#else替代"if 循环结束"
    else:
        print("can't find x>7")


相关文章
|
8月前
leetcode-2016:增量元素之间的最大差值
leetcode-2016:增量元素之间的最大差值
60 0
|
2月前
数组拆分与合并
【10月更文挑战第29天】数组拆分与合并。
26 2
|
Python
LeetCode 5881. 增量元素之间的最大差值
给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。
129 0
寻找旋转排序数组中的最小值 (重复与非重复代码)
寻找旋转排序数组中的最小值 (重复与非重复代码)
118 0
寻找旋转排序数组中的最小值 (重复与非重复代码)
|
算法 前端开发
合并区间
🎈今天给大家带来的是算法练习,题目为"合并区间"。
110 0
往返回来的数据数组Array中添加一个字段的最优写法
往返回来的数据数组Array中添加一个字段的最优写法
LeetCode 2016. 增量元素之间的最大差值
LeetCode 2016. 增量元素之间的最大差值
130 0