Как узнать, когда ссылаться на элемент в цикле for самостоятельно, а не ссылаться на элемент в качестве индекса списка - PullRequest
0 голосов
/ 24 марта 2019

В цикле for я пытаюсь понять, когда обращаться к элементу по имени элемента, а когда - к элементу как к индексу списка, по которому я зацикливаюсь.

В коде, вставленном ниже, я не понимаю, почему «idx» упоминается в операторе «if» со ссылкой на индекс списка, но затем в определении Maximum_score_index он упоминается каксам.

def linear_search(search_list):

  maximum_score_index = None

  for **idx** in range(len(search_list)):

    if not maximum_score_index or **search_list[idx]** > search_list[maximum_score_index]:

      maximum_score_index = **idx**
  return maximum_score_index

Я хотел бы получить объяснение, чтобы я мог различить в будущем и некоторые примеры, чтобы показать разницу, чтобы я мог понять.

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

В основном, эта строка:

if not maximum_score_index or **search_list[idx]** > search_list[maximum_score_index]:
    maximum_score_index = **idx**

Можно представить как:

if (this is the first pass) or (element at index > this loop-iteration element):
    keep this index as largest element

Что я рекомендую сделать:

  1. Пройдите черезкод, на листе бумаги и итерации по списку, чтобы увидеть, что код делает
  2. Напишите код в любой IDE, и используйте отладчик, чтобы увидеть, что код делает

Вы ищете индекс самого высокого элемента в списке или значение?Если вы ищете значение, оно может быть простым:

highest = max(search_list)

Вы также можете использовать enumerate, который предоставит вам «свободный» доступ к текущему индексу в цикле:

>>> search_list
[10, 15, 5, 3]
>>> maximum_score_index = None
>>> for idx, value in enumerate(search_list):
...   if not maximum_score_index or search_list[idx] > value:
...     maximum_score_index = idx
... 
>>> maximum_score_index
1
>>> search_list[maximum_score_index]
15
0 голосов
/ 24 марта 2019

В Python range(num) ( больше или меньше ) возвращает список чисел от 0 до num - 1.Отсюда следует, что range(len(my_list)) сгенерирует список чисел от 0 до длины my_list минус один.Это часто полезно, потому что сгенерированные числа являются индексами каждого элемента в my_list (списки Python начинают считать с 0).Например, range(len(["a", "b", "c"])) - это [0, 1, 2], индексы, необходимые для доступа к каждому элементу в исходном списке.["a", "b", "c"][0] равно "a" и т. Д.

В Python цикл for x in mylist перебирает каждый элемент в mylist, устанавливая x в значение каждого элемента по порядку.Одним из распространенных шаблонов для Python для циклов является for x in range(len(my_list)).Это полезно, потому что вы перебираете индексы каждого элемента списка вместо самих значений.Доступ к значениям почти такой же легкий (просто используйте my_list[x]), но гораздо проще сделать такие вещи, как доступ к предыдущему значению (просто используйте my_list[x-1], гораздо проще, чем если бы у вас не было индекса!).

В вашем примере idx отслеживает индекс каждого элемента списка, когда программа выполняет итерацию по search_list.Чтобы извлечь значения из search_list, программа использует search_list[idx], так же, как я использовал my_list[x] в моем примере.Затем код присваивает maximum_score_index самому индексу номер, например 0, 1 или 2, а не значение.С помощью search_list[maximum_score_index] все еще легко узнать, какова максимальная оценка.Причина того, что idx не используется в качестве средства доступа к списку во втором случае, заключается в том, что программа хранит сам индекс, а не значение массива в этом индексе.

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