gpt4 book ai didi

python - 列表python中元素的成对比较

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:56 25 4
gpt4 key购买 nike

给定以下列表:

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]]

我想对列表的每个子列表中的第二个元素进行成对比较,即比较 [1786, 0.0126525] 中的 0.0126525 等于 0.0126525 from [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 中是否有更详细的方法来对列表元素进行成对比较?

编辑:我在比较 float 时没有考虑容忍度。我会将相差 0.001 的两个 float 视为相等。

最佳答案

你可以zip snplist 与除了第一个元素之外的相同列表,然后进行比较,就像这样

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

由于您要比较 float ,我建议使用 math.isclose来自 Python 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):

关于python - 列表python中元素的成对比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34677230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com