2016-02-17 3 views
1

У меня есть список из списка, СкажемPython: Сравнить элементы списка с предыдущим и следующим списком элементов?

list1 = [('A',[R]), 
     ('B',['A','C']), 
     ('C',['B']), 
     ('B',[]), 
     ('C',['D']), 
     ('D',['C'])] 

Я пытаюсь сравнить 2-й элементы 2-го списка ['A','C'] с предыдущим списком первого элементом 'A' и следующим списком первого элемента ['C']. Аналогично, я хочу сравнить все два элемента списка с первым элементом предыдущего и следующего списка. То, что я пытался до сих пор

for i, items in enumerate (list1): 
    for j in items[1]: 
     if len(j)>0: 
      if i !=0 and j == items[i-1][0]: 
       print(j,items[i-1][0],'equal') 
      if i < len(list1) and j==items[i+1][0]: 
       print(j,items[i+1][0],'equal') 

Это показывает ошибку как " tuple index out of range ". Пожалуйста, поправьте меня, где я ошибаюсь? Ожидаемый результат как

(A,A,equal) 
(C,C,equal) 
(B,B,equal) 
(B,B,equal) 
(D,D,equal) 
(C,C,equal) 
+0

Я предполагаю, что ошибка указана в этом элементе кода [i + 1] [0] – Ray

+0

Нет, я проверил, он все еще говорит то же самое – Rangooski

ответ

1

Когда вы ссылаетесь элементы, вам нужно использовать песни1

  if i !=0 and j == list1[i-1][0]: 
       print(j,list1[i-1][0],'equal') 
      if i -1 < len(list1) and j==list1[i+1][0]: 
       print(j,list1[i+1][0],'equal') 

Не уверен, что if len(j)>0: все о, как J является характер. Может быть, просто if j:

Это может быть проще для понимания кода.

for i, row in enumerate (list1): # Use the list1[1] list as the key data 
    for item in row[1]: # Compare all items in this list with previous row first element 
         # and next row first element 
     if i > 0: # Previous row 
      if item == list1[i-1][0]: 
       print ('{} : {} equal'.format(item, list1[i-1][0])) 
     if i < len(list1) - 1: # Next row 
      if item == list1[i+1][0]: 
       print ('{} : {} equal'.format(item, list1[i+1][0])) 
1

Правильный код ниже:

for i, items in enumerate(list1): 
    for j in items[1]: 
     if len(j)>0: 
      if i!=0 and j==list1[i-1][0]: 
       print(j,j,'equal') 
      if i+1 < len(list1) and j==list1[i+1][0]: 
       print(j,j,'equal') 

Вы должны использовать list1, не items в if заявлении.

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