сравнение списка и возвращение нового списка - PullRequest
0 голосов
/ 04 ноября 2019

Привет, поэтому я пытаюсь запрограммировать свою функцию, которая принимает во вложенном списке число, которое выбирает, какую строку, а затем конкретное число. Итак, что он должен сделать, это взять 3 параметра elevation_map, который является вложенным списком, map_row, который выбирает строку, и уровень, который является целым числом. и возвращает сколько раз конкретная строка меньше, равна и больше уровня.

Итак, на данный момент я создал цикл, который будет проходить через определенную строку вложенного списка, и я пытаюсь просмотреть каждое число и посмотреть, является ли оно меньше, равно и больше уровня, который является третьимпараметр и вернуть его

Примером является сравнение_elevations_within_row (THREE_BY_THREE, 1, 5), THREE_BY_THREE = [[1, 2, 1], [4, 6, 5], [7, 8, 9]] и еговозвращает [1,1,1]

def compare_elevations_within_row(elevation_map: List[List[int]], map_row: int,
                                  level: int) -> List[int]:
    """Return a new list containing the three counts: the number of
    elevations from row number map_row of elevation map elevation_map
    that are less than, equal to, and greater than elevation level.

    >>> compare_elevations_within_row(THREE_BY_THREE, 1, 5)
    [1, 1, 1]
    THREE_BY_THREE = [[1, 2, 1],
                  [4, 6, 5],
                  [7, 8, 9]]


    """
    num = elevation_map[map_row]
    count = []
    for index in num:
        if index < level:
            count[0] = count + 1
        elif index== level:
            count[1] = count + 1
        else:
            count[2] = count + 1
    return count

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Есть несколько небольших проблем:

  • count следует инициализировать тремя нулями (A)
  • при увеличении значений с данным индексом count,вы должны основывать его на текущем значении по этому индексу (B)

Кроме того, когда вы перебираете список, вы перебираете значения списка,не индексы, как предполагают ваши имена переменных. (Я изменил index на value, чтобы прояснить это.)

Учтите:

def compare_elevations_within_row(elevation_map: List[List[int]], map_row: int,
                                  level: int) -> List[int]:
    """Return a new list containing the three counts: the number of
    elevations from row number map_row of elevation map elevation_map
    that are less than, equal to, and greater than elevation level.

    >>> compare_elevations_within_row(THREE_BY_THREE, 1, 5)
    [1, 1, 1]
    THREE_BY_THREE = [[1, 2, 1],
                  [4, 6, 5],
                  [7, 8, 9]]


    """
    count = [0] * 3             # (A)
    for value in elevation_map[map_row]:
        if value < level:
            count[0] += 1       # (B)
        elif value == level:
            count[1] += 1       # (B)
        else:
            count[2] += 1       # (B)
    return count

Является ближайшей рабочей версией вашего кода.

Вы также можете изучить и рассмотреть класс collections.namedtuple или dataclass для возвращаемого значения вместо «сырого» списка из 3 элементов.

0 голосов
/ 04 ноября 2019

У вас есть 2 проблемы здесь. Во-первых, ваш счетчик пуст. Таким образом, при попытке что-то вроде count[0] = count + 1 вы встретите IndexError, так как вы ссылаетесь на элемент, который не существует (первый элемент списка в данном случае). Вместо count = [] вам, вероятно, нужно что-то вроде count = [0, 0, 0].

Вторая проблема заключается в том, что когда вы увеличиваете счетчик для count[value], вам также необходимо ссылаться на тот же индекс списка с правой стороны. Вместо count[0] = count + 1 вам понадобится count[0] = count[0] + 1, или если вы хотите быть кратким count[0] += 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...