Python:将列表元素与上一个和下一个元素列表进行比较?

时间:2016-02-17 00:14:26

标签: list python-2.7 python-3.x tuples

我有一份清单,让我们说

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

我正在尝试将第二个列表['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)

2 个答案:

答案 0 :(得分:1)

当您引用项目时,您需要使用list1

            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 :(得分: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