遍历列表并比较其中的2个元素

时间:2016-01-23 01:24:00

标签: python python-3.x

我正在寻找一种更有效的方法来完成这项功能(没有ZIP请)。希望我能得到一些反馈。我对python很新。但这就是我想要的功能:

遍历一个数字列表,并检查列表中的元素是否有2的差异。对于那些差异为2的元素,将它们附加到列表中

输出应该类似于[[3, 5], [5, 7], [11, 13], [17, 19]]

我的尝试如下:http://goo.gl/qmPkGK

def test(L):

    g = []

    #Traverse entire list starting from index 0 with increments of 1
    b = L[::1]
    print(b)

    #Traverse entire list starting from index 1 with increments of 1
    c = L[1::1]
    print(c)

    #For each element in range of my list given below,
    for i in range(0,len(L)-1):

    #checks if element in c minus element in b == 2
    #if yes, append both elements to k and then append that new list to list g
    if(abs(c[i]-b[i]) == 2):
        k = []
        k.append(b[i])
        k.append(c[i])
        g.append(k)
    print(g)
test([2,3,5,7,11,13,17,19,23,29])

我做的是,将原始列表分成2个列表,列表b和列表c。对于 list b ,遍历从索引0 开始的整个列表,增量为1,对于 list c ,遍历从索引开始的整个列表1,增量为1.现在,我减去列表c中的元素和列表b中的元素,并检查它们的差异是否为2.然后,将它们附加到列表k并将其附加到列表g的末尾。我计划在程序中使用某种计数器/指针遍历列表,然后找到列表中数字之间的差异,如果满足2的差异,则追加它们。我试过但我失败了。感谢

1 个答案:

答案 0 :(得分:2)

def list_diff_2(lst):
  return [(lst[i - 1], lst[i]) for i in range(1,len(lst)) if abs(lst[i] - lst[i-1]) == 2]

这不简单吗?

一般来说,我没有看到任何制作额外列表的理由:通常,原始列表中的一个循环就足够了。