我正在整理一份清单
lista.append(['{}{}'.format('Metros: ', metros),nombre,direccion])
输出是:
[['Metros: 405', 'edificio A', 'San Lorenzo'], ['Metros: 1843', 'edificio B', 'Eusebio Blanco'], ['Metros: 3067', 'edificio C', 'Av. San Martín Sur , Godoy Cruz'], ['Metros: 2863', 'edificio D', 'Tomás Godoy Cruz']]
如何从列表中获取 Meters 的最小值。
在这个例子中它应该返回
['米:405','A 楼','圣洛伦佐']
如果可能,您应该考虑将列表列表转换为字典列表,正如@MLStud 告诉您的那样,这些操作会更简单,更有效,尤其是使用
operator.itemgetter
andmin
/max
,就像一个想法:您可以构建字典并将其添加到列表中:
如果你不能这样做,你仍然可以使用内置函数
min
及其参数key
,但传递给它一个函数,该函数负责获取每个子列表,获取第一项,通过应用它获取数字并将其str.rsplit
传递给float
orint
(所以因为不进行字典排序)。这比使用字典效率低得多,因为它需要一个纯 Python 函数调用、str.rsplit
标量调用和强制转换,以及对列表的两个索引操作(而上面的示例主要通过直接编译的 C 代码完成):有了它应该可以工作
根据马丁的回答,我可以想到一些优化代码的方法。与其创建一个数字非常低的变量并在它还没有的情况下覆盖它,您可以创建一个您永远无法达到的非常高的变量,然后从那里将它与各种数字进行比较。
我认为这就足够了 c:
一个非常紧凑的解决方法可能是:
详情:
[(e,float(e[0].split()[1])) for e in lista]
我们构建一个新的元组列表,其中包含原始元素以及转换为 a 的米float
。我们用split()
空格分隔每个列表的第一个元素(米),因为我们只对数字感兴趣。min()
在前面的列表中使用,指示它将应用于元组的哪个索引:key = lambda x: x[1]