2016-11-08 1 views
0

Я пытаюсь написать функции python, которые принимают в списке или массиве. если любые два числа в списке или массиве равны нулю, я хочу вернуть позиции этих двух чисел.Список Python: если пара чисел равна 0 возвращает позиции элементов

Вот что у меня есть. Я прохожу через список и имею вложенный цикл из того же списка, чтобы проверить, есть ли внешний итератор плюс вложенный итератор == 0: если да, то я пытаюсь вернуть позиции двух чисел, которые == 0. но это просто вместо этого дает мне фактические два числа. Странно, что результат ниже (хотя это не то, что я хочу) должен быть (3, -3). Любой вклад будет высоко оценен

def twosum(nums): 
    for x in nums: 
     for y in nums: 
      if x + y == 0: 
       return nums[x],nums[y] 
print twosum([1, 3, 5, -3]) 
output = (-3, 3) 
+0

Если 'x' является элементом' nums', что такое 'nums [x]'? Вернитесь в свой материал курса и проверьте, что делают скобки, если вы не помните. – user2357112

+0

@ user2357112 Я знаю, что это индекс, но я думаю, что первое число должно быть 3 не -3. – ziggy

+1

@ziggy: Если 'x' равно 3, что такое' nums [x] '? Это не 3. – user2357112

ответ

3

Вы должны использовать enumerate() в то время как итерацию по списку, как:

def twosum(nums): 
    for i, x in enumerate(nums): 
     for j, y in enumerate(nums): 
      if x + y == 0: 
       return i, j 

Однако эта логика может быть дополнительно оптимизирована как:

def twosum(nums): 
    for i, x in enumerate(nums): 
     if -x in nums[i:]: # check '-'ive of the number in non-iterated list 
      return x, -x 
+1

Это лучший ответ, который не добавляет дополнительный линейный компонент к производительности и который обрабатывает дубликаты в списке. – user3030010

1

Вы бы return nums.index(x), nums.index(y)

+0

ahh да, что бы работать – ziggy

+0

Технически работает, но использование 'index' - это плохая привычка. Это требует повторного сканирования списка, чтобы найти элемент, который является ненужным и катастрофически медленным, если это делается повторно в цикле. – user2357112

Смежные вопросы