我有以下元组列表
lstoflsts = [(1.2, 2.1, 3.1),
(0.9, 3.4, 7.4),
(2.3, 1.1, 5.1)]
我想获得第二列的最小值(基于上面的例子, 1.1 )。
我尝试使用min(listoflists)
但没有成功。
任何建议如何处理?
注意:如果可能的话我想避免在行和列上循环...
答案 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] )