Я думаю, 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:]:
пропущены зацикленные элементы, так что возвращает суммированную пару только один раз.