【问题标题】:How to compare lists inside of a list and pick the one with the greatest first value? [duplicate]如何比较列表中的列表并选择具有最大第一个值的列表? [复制]
【发布时间】:2017-10-24 00:20:28
【问题描述】:

假设我有一个列表:

def returnBiggestStartingList:

   L1 = [ [1,2,3,4], [5,6,7,8], [7,8,9,10] ]

我想返回 L1 中的一个列表。我要返回的是第 0 个元素最大的那个。例如,在上面的示例中,我想返回 L1[2],因为它的第一个元素高于所有其他数组的第一个元素(7 大于 1 和 5)。

我还需要考虑一个或多个列表中的第 0 个元素是否相同,如果是这种情况,我将移至第二个元素并比较它们(依此类推)

有人知道我该怎么做吗?

【问题讨论】:

  • 我认为max(L1) 适合你。
  • 这必须是纯python,还是可以用numpy?

标签: python list


【解决方案1】:

您所描述的是列表的自然顺序。所以你可以直接使用max,如果所有列表都具有相同的大小,那就更简单了(当列表的长度不同时,
如果列表较短,它将与具有相同第一个元素的较长列表进行比较,例如:[7,8,9] < [7,8,9,10] 这也应该可以满足您的需求)

L1 = [ [1,2,3,4], [5,6,7,8], [7,8,9,11], [7,8,9,10] ]

print(max(L1))

结果:

[7, 8, 9, 11]

【讨论】:

  • 这对我来说看起来不错......但我不确定列表的 size 与任何事情有什么关系;-)
  • 如果一个列表较短,它将与具有相同第一个元素的较长列表进行比较。但这可能也在意料之中。
  • 这太完美了.. 非常感谢!
  • 所以? Python 会很高兴地比较它们并给出确定的结果:max([1, 2, 3, 4], [1, 2, 3]) --> [1, 2, 3, 4]。由于 OP 说比较仅基于第一个元素(并且当第一个元素相等时不提供任何冲突解决策略),所以大概任何具有最大第一个元素的列表都可以...... :-)
  • @Jean-FrançoisFabre -- 啊,我错过了。就问题中的规定而言,它仍然只是字典顺序:-)。是的,放弃关于长度的声明是我所提倡的。充其量,我认为它不会为答案增加任何东西。在最坏的情况下,感觉有点混乱,因为长度似乎并不重要。话虽如此,我认为这真的无论哪种方式都很重要......
【解决方案2】:

你可以试试这个:

 def returnBiggestStartingList(L1):

     return [i for i in L1 if i[0] == max(zip(*L1)[0])][0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2017-11-13
    • 2020-01-27
    相关资源
    最近更新 更多