#python #algorithm
#питон #алгоритм
Вопрос:
поэтому я последовал учебнику, чтобы узнать, как завершить 2
sum, и я понимаю, что означает строка, но я не понимаю, почему diffs[list[i]]
возвращает 0
индекс. Я прошел алгоритм с текущими аргументами и i
пришел к 3
выводу, когда он возвращает индексы
diffs = {} # Make a hash map to store values for i in range(len(list)): # Iterate through list if list[i] in diffs: # If the number you are on is in the has map return [diffs[list[i]], i] # return indexes else: diffs[target - list[i]] = i print(twosum([2, 11, 15, 7], 9))
Комментарии:
1. Кажется противоречием, что это вернет первый индекс. «различия» пусты при первом запуске.
2. Вы не должны называть свою переменную
list
. Это делает ваш код очень запутанным и может вызвать проблемы при попытке использовать встроеннуюlist()
функцию3.
twosum([2,11,15,7], 9)
должен вернуться[0, 3]
, что, по-видимому, и происходит. что это такое, чего ты не понимаешь?4. если вы запустите это, он вернет [0, 3], что равно 2 и 7, что соответствует цели @cheery
5. @shayanvalaie тогда что же тебя смущает? это работает правильно, нет?
Ответ №1:
def twosum(nums, target): diffs = {} # Make a hash map to store values for i in range(len(nums)): # Iterate through list if nums[i] in diffs: # If the number you are on is in the has map return [diffs[nums[i]], i] # return indexes else: diffs[target - nums[i]] = i print(i, diffs)
In [4]: print(twosum([2, 11, 15, 7], 9)) 0 {7: 0} 1 {7: 0, -2: 1} 2 {7: 0, -2: 1, -6: 2} [0, 3]
Как вы можете видеть из приведенного выше вывода, 7
имеет индекс 0
в словаре. Это первый элемент, который добавляется в словарь. Причина в том, что вы сохраняете различия в словаре. target - nums[0]
есть 7
в данном случае потому nums[0]
, что есть 2
.
Затем, когда вы дойдете до последнего элемента, а именно 7
, вы найдете его в словаре с индексом 0
. То есть diffs[nums[3]] == diffs[7] == 0
. И ты возвращаешься [diffs[nums[i]], i] == [diffs[nums[3]], 3] == [diffs[7], 3] == [0, 3]
.
Кроме того, не используйте это имя list
для именования ваших переменных.
Комментарии:
1. индексы-это значения словаря, в то время как различия являются ключевыми. мы помещаем эти индексы в качестве значений в словарь здесь:
diffs[target - nums[i]] = i
. Я не совсем понимаю, что вы имеете в виду под «автоматически». Если это означает, что словарь автоматически возвращает значение ключа, учитывая, что ключ присутствует в словаре, то ответ «да». В отличие от некоторых других языков, таких как Java, словари python автоматически возвращают значение. Для этого вам не нужно использовать специальный метод @shayanvalaie2. понял, спасибо
Ответ №2:
При первом запуске цикла. diffs[target - list[i]] = i
устанавливает различия в {7: 0}. Вот как diffs[список[3]] оценивается как 0. Например.
diffs[list[3]] diffs[7] 0
Комментарии:
1. Хорошо, теперь я это понимаю, спасибо за объяснение