如何确定python中元组列表的列中的最小值

时间:2015-08-25 13:31:50

标签: python

我有以下元组列表

lstoflsts = [(1.2, 2.1, 3.1),
             (0.9, 3.4, 7.4),
             (2.3, 1.1, 5.1)]

我想获得第二列的最小值(基于上面的例子, 1.1 )。

我尝试使用min(listoflists)但没有成功。

任何建议如何处理?
注意:如果可能的话我想避免在行和列上循环...

5 个答案:

答案 0 :(得分:10)

最简单的方法是,您可以使用min

>>> lstoflsts = [(1.2, 2.1, 3.1),
...              (0.9, 3.4, 7.4),
...              (2.3, 1.1, 5.1)]
>>> 
>>> min(lstoflsts, key=lambda x: x[1])
(2.3, 1.1, 5.1)
>>> min(lstoflsts, key=lambda x: x[1])[1]
1.1

答案 1 :(得分:4)

根据@udo的要求,

min(zip(*lstoflsts)[1])

这将更改列表,使列成为行(旋转它),然后获取第2行(基于0的索引)行(以前的列)。

最后,它返回最小值。

答案 2 :(得分:3)

仅仅因为对发电机表达的热爱:

min(x[1] for x in lstoflsts)

答案 3 :(得分:1)

它的工作方式与您根据该标准对列表进行排序的方式完全相同。通过list.sort()函数:

  

min iterable [, key ]):

     

[...]可选的 key 参数指定一个单参数排序函数,就像operator.itemgetter()一样。

例如使用import operator lstoflsts = [(1.2, 2.1, 3.1), (0.9, 3.4, 7.4), (2.3, 1.1, 5.1)] print min(lstoflsts, key=operator.itemgetter(1)) # prints (2.3, 1.1, 5.1)

operator.itemgetter()

当然,您也可以使用lambda表达式作为键函数。但是,使用zip()通常被认为比lambda函数更有效。它比涉及<script> window.$divs = []; window.$i = 0; window.textFull = new Array(); $(document).ready(function(){ window.setInterval(function(){ /// call your function here $divs = $("[class^=ExternalClass]"); for($i=0;$i<$divs.length;$i++) { textFull[$i] = $($divs[$i]).html(); if(typeof textFull[$i] != 'undefined' && textFull[$i].length > 50) { //alert($textFull[$i]); this alert show the correct text $($divs[$i]).html(textFull[$i].substring(0,49)+"<a href='javascript:alert(textFull[$i]);'>...more</a>"); } } }, 500); }); </script>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 的任何内容都更有效。

供参考:

答案 4 :(得分:1)

虽然分享对生成器表达式的喜爱(在这种情况下,一旦你知道Python,它就是一行和精美的自我记录),是否有任何实际错误

m =lstoflsts[0][1]
for x in lstoflsts: m = min(m, x[1] )