【问题标题】:From a list of tuples get the tuple with the largest difference between its elements从元组列表中获取其元素之间差异最大的元组
【发布时间】:2019-11-26 07:50:55
【问题描述】:

假设我有一个元组列表,例如:

listTuples = [(0, 3), (5, 10), (2, 4)] 

我想获取元组元素之间差异最大的元组的索引

3 - 0 = 3
10 - 5 = 5
4 - 2 = 2

所以我想要 1 作为回报。

目前我正在执行以下操作,但也许有更好的方法(更快,更少的代码行)。

listTuples = [(0, 3), (5, 10), (2, 4)] 

k = 0
e = 0

for j, i in enumerate(listTuples):
    diff = i[1] - i[0]
    if k < diff:
        k = diff
        e = j
    else:
        pass

print(e)

【问题讨论】:

  • 您可以从答案中看到单行选项,但关于您自己的循环解决方案(可以说更具可读性),您可以通过删除 else: pass 使其更简洁什么都不做。

标签: python python-3.x list tuples


【解决方案1】:

您可以将列表对象的index 方法与max 函数一起使用。即,

>>> listTuples = [(0, 3), (5, 10), (2, 4)]
>>> listTuples.index(max(listTuples, key=lambda x: x[1] - x[0]))
1

这里max(listTuples, key=lambda x: x[1] - x[0]) 将返回一个具有最大差异的元组,index 方法将从原始列表中找到该元组的索引。

即listTuples.index((5, 10))

【讨论】:

  • 只是即兴解决方案,因此它甚至可以用于负值 - print( listTuples.index( max(l, key=lambda x: abs(abs(x[1])-abs(x[0])) ) ) ) 随时分享您对此的想法 :)
【解决方案2】:

我会推荐使用max() 函数:

x = [abs(j - i) for i, j in listTuples]
print(x.index(max(x)))

【讨论】:

    【解决方案3】:

    您可以将内置的max 与自定义键功能一起使用,如下所示:

    max(range(len(listTuples)), key=lambda i: listTuples[i][1] - listTuples[i][0])
    

    它根据key 函数为每个元素返回的最大值提供来自range(len(listTuples)) 的值。

    【讨论】:

      【解决方案4】:

      将max() 与自定义键一起使用:

      max(enumerate(listTuples), key = lambda x: x[1][1]-x[1][0])[0]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 2019-10-26
        • 2016-11-17
        相关资源
        最近更新 更多