问题描述
我有一个列表a
具有id, (x,y), err
用对象检测相关联。
因此,每个id
都与一个err
相关联。
err
的值从0变为5。我要执行的操作是获取与每个id
关联的err
并检查其是否等于0。如果err
为0,则将该id
附加到列表errorfree_id
。
我无法从上述代码中执行此操作。
使用字典这样做会更好吗?
任何帮助将不胜感激。
errorfree_id = []
a = [(1,(50,26),0),(6,(18,29),0),(4,(4,18),1)]
for id, (x,y) , err in a:
if id in err == 0:
errorfree_id.append(id)
return errorfree_id
1楼
这是一种方法:
errorfree_id = []
a = [(1,(50,26),0), (6,(18,29),0), (4,(4,18),1)]
for i, j, k in a:
if k == 0:
errorfree_id.append(i)
errorfree_id # [1, 6]
但是,列表理解可能更易于维护:
errorfree_id = [i for i, _, k in a if k == 0]
2楼
您的状况有误:
for id, (x,y) , err in a:
if err == 0:
errorfree_id.append(id)
if id in err == 0
应该是if err == 0
3楼
您还可以使用filter
和lambda
来做到这一点:
errorfree_id = [i[0] for i in filter(lambda (i,_,l): l==0, a)]
输出:
[1, 6]
4楼
您可以将列表理解与元组拆包一起使用:
>>> a = [(1,(50,26),0),(6,(18,29),0),(4,(4,18),1)]
>>> [id for id,(x,y),err in a if err==0]
[1, 6]