我在Python中有一个列表的2D列表,我需要在第1列中找到最低的浮点数,然后在同一行中返回值,但是在第0列。
mylist = [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]]
在这种情况下,我想要返回:someid-3
目前我正在追加 None
的 值,然后执行此操作:(这对于这样一个“简单”任务来说似乎很复杂)
mylist.sort(key=lambda x: x[1])
if len(temp_op_distance_list) != 0 and temp_op_distance_list[0][1] != None:
return temp_op_distance_list[0][0]
有关整个Python项目的一些信息。
该列表大约有8000个条目,其值为“无”,一些floats
。
此代码收集3D空间中鼠标指针的距离并测试程序中的所有3D对象。当值None
时,对象未被击中。
已编辑:正确的列表格式 - 当然你们都是对的,指出我的列表不正确。对不起。
答案 0 :(得分:1)
假设您的列表是正确的Python列表
mylist = [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]]
您只需创建一个生成器表达式,仅选择有效非零项目,并使用密钥min
确定itemgetter(1)
>>> from operator import itemgetter
>>> min((e for e in mylist if e[1]), key = itemgetter(1))[0]
'someid-3'
答案 1 :(得分:0)
from operator import itemgetter
id = min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
filter(itemgetter(1), mylist)
删除第二个元素为false的所有元素;布尔上下文中的False
。其中包括0
和None
。
min(..., key=itemgetter(1))
根据您提供的密钥找到最低值;所以过滤后浮点值最小的列表。
[0]
从列表中选择ID条目。
快速演示(具有语法正确的输入列表):
>>> mylist = [
... ['someid-1', None],
... ['someid-2', 4545.474],
... ['someid-3', 200.1515],
... ['someid-4', None],
... ['someid-5', 0]
... ]
>>> from operator import itemgetter
>>> min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
'someid3'