当前位置:  开发笔记 > 编程语言 > 正文

成对比较列表python中的元素

如何解决《成对比较列表python中的元素》经验,为你挑选了1个好方法。

给出以下列表:

snplist = [[1786, 0.0126525], [2463, 0.0126525], [2907, 0.0126525], [3068, 0.0126525], [3086, 0.0126525], [3398, 0.0126525], [5468,0.012654], [5531,0.0127005], [5564,0.0127005], [5580,0.0127005]]

我想这样做在列表中的每个子列表中的第二个元素的两两比较,即比较一下,看0.0126525[1786, 0.0126525]等于0.0126525[2463, 0.0126525]等等,如果是的话,打印输出中的代码表示.

使用for循环,我实现了结果:

for index, item in enumerate(snplist, 0):
    if index < len(snplist)-1:
        if snplist[index][1] == snplist[index+1][1]:
            print snplist[index][0], snplist[index+1][0], snplist[index][1]

当使用列表索引对循环元素进行成对比较时,我总是'index out of range'因为最后一个元素而进入错误.我通过添加条件来解决这个问题

if index < len(snplist)-1:

我认为这不是最好的方法.我想知道是否有更复杂的方法在python中对列表元素进行成对比较?

编辑:比较浮点数时我没有考虑过容差程度.我会考虑两个0.001差异相同的花车.



1> thefourtheye..:

您可以zipsnplist与排除的第一个元素相同的列表,并做比较,这样

for l1, l2 in zip(snplist, snplist[1:]):
    if l1[1] == l2[1]:
      print l1[0], l2[0], l1[1]

由于您要比较浮点数,我建议使用math.isclosePython 3.5中的函数,就像这样

def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
    return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

如果您想要0.001容差,您可以像这样进行比较

if is_close(l1[1], l2[1], 0.001):

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有