2016-01-20 2 views
0

Я относительно новичок в python и программировании, я пытаюсь решить проблему, требующую распечатки пары чисел, где разница обоих чисел == 2. Вот моя попытка :Перемещение по списку при сравнении 2 элементов

l = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23] 
    k = [] 
    count = 0     
    a = l[0]    #initialize a to be the element in the first index 
    #b = l[1] 
     while (count < len(l)):  #while count is less than length of list 
      for i in range(len(l)): #for each element i in l, 
       k.append(a)   #append it to a new list k 
       a, b = l[i+1], l[i+1] #Now a and b pointers move to the right by 1 unit 
       count += 1    #update the count 
      print(k[i])   #print newly updated list k 

     if(a - b == 2):  #attempting to get the difference of 2 from a,b. if difference a,b == 2, append them both 
          #If fail, move on to check the next 2 elements. 
      #k.append(l[i]) 

print(k) 

Код застревает в a,b = l[i+1],l[i+1]. Чтобы помочь вам понять, что происходит с кодом, обратитесь к: http://goo.gl/3As1bD

Цените любую помощь! Извините, если он abit messy. Все, что я хочу сделать, это иметь возможность перемещать каждый элемент в списке, сравнивая их различия, если это == 2

Спасибо! Заглядывая вперед к альтернативам

+1

Этот код дает ошибку в строке 'а, б = l [i + 1], l [i + 1] ', поскольку индекс списка выходит за пределы диапазона. Когда 'i = len (l) - 1' вы делаете' l [i + 1] '. В вашем коде есть и другие недостатки, кроме этого. –

ответ

2

Вы можете просто сделать

l = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23] 
[(i,j) for i,j in zip(l,l[1:]) if abs(i-j)==2] 

Выход: [(3, 5), (5, 7), (11, 13), (17, 19)]

+1

Ничего себе! это восхитительно. Хотя я не узнал про zip, спасибо! – misheekoh

0

Почему бы не сделать двойной вложенный цикл:

l = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23] 
for i in l: 
    for j in l: 
     if abs(i-j) == 2: 
      print(i, j) 
+0

Хорошая идея, но она печатает удваивает! как 3,5 и 5,3 – misheekoh

2

Проблема заключается в том, что вы итерация range(len(l)) и попытался получить передний предмет на l[i+1], который заставляет забрать IndexError:

Например:

>>> l = [1,2,3] 
>>> 
>>> l[len(l)+1] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

Для получить поездку этой проблемы вы должны перебираем range(len(l)-1) и для первого элемента использовать l[i]:

for i in range(len(l)-1): #for each element i in l, 
       k.append(a)   #append it to a new list k 
       a, b = l[i], l[i+1] 
+0

приятно! Но он продолжает цикл для добавления в список k. Я пытаюсь сравнить 2 элемента из индекса, чтобы проверить, равна ли разница 2. По-прежнему не получается. Я работаю над этим. Еще раз спасибо. – misheekoh

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