Нападение на проблему двух сумм с помощью грубого подхода - PullRequest
0 голосов
/ 09 апреля 2020

Я учусь кодировать в python и написал следующий код для решения проблемы двух сумм в списке. Мой подход заключается в следующем:

  1. Возьмите элемент в списке L
  2. вычтите значение элемента из целевой суммы
  3. Проверьте, есть ли это значение где-нибудь в списке
  4. Если он там есть, добавьте его индекс в новый список и удалите это значение из исходного списка. L

Мой код работает хорошо, если я удаляю «удалить» команда, но дает двойной результат. Пожалуйста, помогите мне в выявлении ошибки.

l=[]
def two_sum(l,sval):
    result=[]
    for i in range(len(l)):
        new=sval-l[i]
        if new in l:
            result=result+[(i,l.index(new))]
            l.remove(new) 
    return(result)

1 Ответ

0 голосов
/ 09 апреля 2020

Я думаю, list index out of range - это ошибка, которую вы получаете. Причина в том, что вы никогда не должны удалять элемент при повторении списка в for loop: список был сокращен, потому что соответствующий индекс в диапазоне (0, Len (l)) был удален.

Я думаю, что * Для этой цели лучше использовать 1005 * с двумя показателями. Попробуйте это:

def two_sum(l,sval):
    i=0
    j=0
    result=[]
    while i<len(l):
        new=sval-l[i]
        if new in l[j:]:
            result=result+[(i,l.index(new))]
            l[i], l[j]=l[j],l[i]
            j+=1
        i+=1
    return result, l[j:]

Итак, если вы протестируете:

l=list(np.arange(0,10,1))
two_sum(l,10)

, то вернется:

([(1, 9), (2, 8), (3, 7), (4, 6), (5, 5)], [0, 6, 7, 8, 9])

Где [(1, 9), (2, 8), (3, 7), (4, 6), (5, 5)] - это пары, а [0, 6, 7, 8, 9] - это исходный список с удаленными суммированными объектами .

Плюс, я полагаю, он немного более эффективен, чем предоставленные вами коды: обратите внимание, что в строке if new in l[j:]: пропущены зацикленные элементы, так что возвращает суммированную пару только один раз.

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