Выполняю алгоритм 2sum, и я путаюсь в синтаксисе python

#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 автоматически возвращают значение. Для этого вам не нужно использовать специальный метод @shayanvalaie

2. понял, спасибо

Ответ №2:

При первом запуске цикла. diffs[target - list[i]] = i устанавливает различия в {7: 0}. Вот как diffs[список[3]] оценивается как 0. Например.

 diffs[list[3]] diffs[7] 0  

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

1. Хорошо, теперь я это понимаю, спасибо за объяснение