Почему для доступа к циклу используется только первая строка?

#python

Вопрос:

Я попытаюсь найти элементы из 2d-массива, в котором элементы каждой строки отсортированы. Я использую цикл for для доступа к строке, а затем применяю двоичный поиск в каждой строке. Но для цикла застрять в строке 1.

 def searchMatrix(self, matrix, target) -> bool:
    m = len(matrix) 
    print(m)

    for i in range(m):  
        print(i)
        if len(matrix[i]) == 1:
            if matrix[i][0] == target:   
                return True
            else:
                return False
        else: 
            start = 0;
            end = len(matrix[0]) - 1
            while start <= end :
                    mid = round((start end)/2)
                    if(matrix[i][mid] == target):
                        return True
                    elif matrix[i][mid] > target:
                        end = mid - 1
                    elif matrix[i][mid] < target:
                        start = start   1        
            return False
 

Мой вывод:

 3
0
 

но результат должен быть

 3 0 1 2
 

Комментарии:

1. Вы всегда возвращаете что-то на первой итерации, поэтому цикл существует на первой итерации.

Ответ №1:

Внутри вашего цикла все условия приведут к return оператору, поэтому функция завершится на первой итерации. Вы можете удалить все return False и просто добавить одно в качестве последнего оператора вашей функции:

 def searchMatrix(self, matrix, target) -> bool:
    m = len(matrix) 
    print(m)

    for i in range(m):  
        print(i)
        if len(matrix[i]) == 1:
            if matrix[i][0] == target:   
                # Only exit the function if you find the target
                return True
        else: 
            start = 0;
            end = len(matrix[0]) - 1
            while start <= end :
                    mid = round((start end)/2)
                    if(matrix[i][mid] == target):
                        # Only exit the function if you find the target
                        return True
                    elif matrix[i][mid] > target:
                        end = mid - 1
                    elif matrix[i][mid] < target:
                        start = start   1

        # Otherwise, keep iterating

    # Since all rows were searched, exit the function
    return False